33 lines
455 B
C++
33 lines
455 B
C++
template<typename Number>
|
|
Number power(Number base, int exponent)
|
|
{
|
|
int zerodir;
|
|
Number factor;
|
|
if (exponent < 0)
|
|
{
|
|
zerodir = 1;
|
|
factor = Number(1)/base;
|
|
}
|
|
else
|
|
{
|
|
zerodir = -1;
|
|
factor = base;
|
|
}
|
|
|
|
Number result(1);
|
|
while (exponent != 0)
|
|
{
|
|
if (exponent % 2 != 0)
|
|
{
|
|
result *= factor;
|
|
exponent += zerodir;
|
|
}
|
|
else
|
|
{
|
|
factor *= factor;
|
|
exponent /= 2;
|
|
}
|
|
}
|
|
return result;
|
|
}
|