1)残缺解法:
double Power(double base,int exponent)
{
double result=1.0;
for(int i=0;i<=exponent;++i)
result*=base;
return reslut;
}
没有考虑输入指数小于1(0或负数)
2)底数是零且指数是负数的时候,会对0求倒数导致程序出错
0的0次方是没有意义的
bool g_InvalidInput=false;
double Power(double base,int exponent)
{
g_InvalidInput=fasle;
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;
}
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 fasle;
}
注意:判断底数base是不是等于0时,计算机内表示小数的时候都有误差(包括float和double),不能直接写base==0
3)
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;
}
注意:右移运算符代替除以2,位运算符代替求余运算符效率高