题目描述
求base的exponent次方
考虑:当次方为负,base不能为0
bool equal(double a, double b)
{
if((a-b<0.0000001) && (b-a<0.0000001))
return true;
else
return false;
}
double PowerCore(double base, unsigned int e)
{
double res = 1.0;
for(int i=0; i<=e; i++)
{
res *= base;
}
return res;
}
double Power(double base, int exponent)
{
/*
enponent小于0, base!=0
*/
if(exponent <=0 && equal(base, 0.0))
{
throw "Wrong Valid";
}
unsigned int absExponent = abs(exponent);
if(exponent<0)
{
absExponent = (unsigned int)(-exponent);
}
double res = PowerCore(base, absExponent);
if(exponent<0)
{
res = 1.0/res;
}
return res;
}
注意:由于精度问题,double和float不能直接用==相比
高效算法
知道16次方,*当前的数即可得到32次方
double PowerCore(double base, unsigned int exponent)
{
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double res = PowerCore(base, exponent>>1);
res *= res;
if(exponent & 0x01 == 1)
return res * base;
return res;
}