思路:快速幂
double Power(double base, int exponent) {if(isEqual(base, 0))return 0.0;if(exponent == 0)return 1.0;if(exponent == 1)return base;double ans = 1.0;bool flag = exponent > 0;exponent = abs(exponent);while(exponent > 0){if(exponent & 1 == 1){ans *= base;}base *= base;exponent >>= 1;}return flag ? ans : 1 / ans;}//递归double Power(double base, int exponent){if(isEqual(base, 0))return 0.0;if(exponent == 0)return 1.0;if(exponent == 1)return base;bool flag = exponent > 0;exponent = abs(exponent);double result = Power(base, exponent >> 1);result *= result;if(exponent & 1 == 1)result *= base;return flag ? result : 1 / result;}
1.判断是否为奇数:
exponent & 1 == 1
直接除以2奇数会丢失小数值
2.判断base是否为0时,不能直接base==0
在计算机内表示小数时(包括float和double)都有误差。判断两个小数是否相等,只能判断它们之差的绝对值是不是在一个很小的范围内(比如小于0.0000001 1e-7)。
