实现函数double Power(double base , int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
bool g_InvalidInput = false;
bool equal(double num1,double num2)
{
if((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))//浮点型判断相等
{
return true;
}
return false;
}
/*本段 : 乘积利用位运算替代除法,并且利用幂次方的性质
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;
}
*/
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
double result = 1.0;
for(int i=1;i<=exponent;++i)
{
result *= base;
}
return result;
}
double Power(double base, int exponent)
{
g_InvalidInput = false;
if(equal(base,0.0) && exponent<0)//出现0的负指数幂,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;
}