要注意的问题:
1. 指数为0或者是负数
2. 判断小数误差切记不能用 == ,因为计算机内表示小数时(包括float和double型小数)都有误差。判断两个小数是否相等,只能判断它们之差的绝对值是否在一个很小的范围内
1 bool g_InvalidInput = false; 2 bool equal(double num1, double num2); 3 double PowerWithUnsignedExponent(double base, unsigned int exponent); 4 5 double Power(double base, int exponent) 6 { 7 g_InvalidInput = false; 8 9 if(equal(base, 0.0) && exponent < 0) 10 { 11 g_InvalidInput = true; 12 return 0.0; 13 } 14 15 unsigned int absExponent = (unsigned int)(exponent); 16 if(exponent < 0) 17 absExponent = (unsigned int)(-exponent); 18 19 double result = PowerWithUnsignedExponent(base, absExponent); 20 if(exponent < 0) 21 result = 1.0 / result; 22 23 return result; 24 } 25 26 27 double PowerWithUnsignedExponent(double base, unsigned int exponent) 28 { 29 double result = 1.0; 30 / 31 for(int i = 1; i <= exponent; ++i) 32 result *= base; 33 34 return result; 35 } 36 37 bool equal(double num1, double num2) 38 { 39 if((num1 - num2 > -0.0000001) 40 && (num1 - num2 < 0.0000001)) 41 return true; 42 else 43 return false; 44 }