比较简单的代码:
double Power(double base, double exponent)
{
double result=1.0;
for(int i=1; i<=exponent; ++i)
{
result*=base;
}
return result;
}
这个没有考虑到指数小于1的时候。
使用如下的代码,这个用一个全局变量来标示。
double Power(double base, int exponent)
{
g_InvalidInput = false;
if(equal(base, 0.0) && exponent < 0)
{
g_InvalidInput = true;
return 0.0;
}
unsigned int absExponent = (unsigned int)(exponent);
if(exponent < 0)
absExponent = (unsigned int)(-exponent);
double result = PowerWithUnsignedExponent(base, absExponent);
if(exponent < 0)
result = 1.0 / result;
return result;
}
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
double result = 1.0;
/
for(int i = 1; i <= exponent; ++i)
result *= base;
return result;
}
bool equal(double num1, double num2)
{
if((num1 - num2 > -0.0000001)
&& (num1 - num2 < 0.0000001))
return true;
else
return false;
}
由于计算机表示小数都有误差因此不能用==来判断两个小数是否相等。如果两者差值很小,则认为相等。
用以下的方法实现会更好一些。
下图这个公式:
![](https://images0.cnblogs.com/blog/782258/201507/211758207097672.png)
使用递归的方式来实现。
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double result = PowerWithUnsignedExponent(base, exponent >> 1);
result *= result;
if((exponent & 0x1) == 1)
result *= base;
return result;
}