I am taking a class in C++ and I noticed there are only a few math operators to use. I also noticed that C++ does not come with an exponential operator within its math libr
You don't write a function for this (unless you're insane, of course). There's a perfectly good pow function defined in the <cmath>
header.
Aside: if you try to use
^
as a power operator, as some people are wont to do, you'll be in for a nasty surprise. It's the exclusive-or (XOR) operator (see here).
Most C operations readily intended to mapped to a single processor instruction when C was invented. At the time, exponentiation was not a machine instruction, thus the library routine.
What platform and which compiler are you using? My guess is TurboC. Mostly cmath file has most of the mathematical functions covered in other compilers.
Python has the **
operator for exponentiation.
In C++ you can actually define an operator like that with some trickery.
By combining the unary *
operator with the binary *
operator, like this:
#include <cmath>
#include <iostream>
struct Num {
double value;
Num(double value) : value(value) { }
typedef Num* HalfStar;
HalfStar operator*() const { return HalfStar(this); }
Num operator*(const HalfStar& rhs) const
{
return Num(std::pow(value, rhs->value));
}
Num operator*(const Num& rhs) const
{
return Num(value * rhs.value);
}
friend std::ostream& operator<<(std::ostream& os, const Num& n)
{
return os << n.value;
}
};
int main(int argc, char**argv)
{
Num a = 10;
Num b = 9;
std::cout << "a*b = " << (a*b) << "\n";
std::cout << "a**b = " << (a**b) << "\n";
return 0;
}
This will not work with non-class types though, so you can not do: x**2
.
See here for a live example.
According to Bjarne Stroustrup in his book The design and evolution of C++. They decided to avoid exponential operator because :