//考虑不周
double Power1(double base,int exponent)
{double result = 1.0;
for(int i = 1;i<exponent;++i)
result *= base;
return result;
}
//判断浮点数是否相等
{
if((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001) )
return true;
else
return false;
}
double PowerWithUnsignedExponent(double base,unsigned int exponent)
{
double result = 1.0;
for(int i =1;i<exponent;++i)
result *= base;
return result;
}
bool g_InvalidInput = false;
double PowerWithUnsignedExponent2(double base,unsigned int exponent);
double Power2(double base,int exponent)
{
//全局变量
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);
double result = PowerWithUnsignedExponent2(base,absExponent);
if(exponent < 0)
result = 1.0 / result;
}
double PowerWithUnsignedExponent2(double base,unsigned int exponent)
{
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double result = PowerWithUnsignedExponent2(base,exponent>>1);
result *= result;
if(exponent & 0x1 == 1)
result *= base;
return result;
}
void Test(double base, int exponent, double expectedResult, bool expectedFlag)
{
//double result = Power1(base, exponent);
double result = Power2(base, exponent);
if(abs(result - expectedResult) < 0.00000001 && g_InvalidInput == expectedFlag)
printf("Test passed.\n");
else
printf("Test failed.\n");
}
int main()
{
printf("Test1 begins.\n");
Test(2, 3, 8, false);
printf("Test2 begins.\n");
Test(-2, 3, -8, false);
printf("Test3 begins.\n");
Test(2, -3, 0.125, false);
printf("Test4 begins.\n");
Test(2, 0, 1, false);
printf("Test5 begins.\n");
Test(0, 0, 1, false);
printf("Test6 begins.\n");
Test(0, 4, 0, false);
printf("Test7 begins.\n");
Test(0, -4, 0, true);
}