1. 考虑double float 的相等,不能仅仅用==表示,是有精度限制的。
2. n 大于0,小于0的情况
3.
if (temp_diveded & 1)
result *= base;
base *= base;
temp_diveded >>= 1;
想法很赞!!!!
#define ACCURACY 0.0000001
class Solution {
public:
double pow(double x, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (n == 0)
return 1.0;
if (n==1)
return x;
if (equal(x, 1.0))
return x;
if (equal(x,-1.0)){
if (n%2 == 0 )
return abs(x);
else
return -abs(x);
}
if (n < 0)
return 1.0/pow(x, -n);
double result = 1;
double base = x;
int temp_diveded = n;
while (temp_diveded){
if (temp_diveded & 1)
result *= base;
base *= base;
temp_diveded >>= 1;
}
return result;
}
bool equal(double x, double y){
return abs(x-y) <= ACCURACY;
}
};
本文介绍了一种快速幂算法实现方法,并详细解释了如何处理浮点数运算中的精度问题。通过使用位操作和递归思想,该算法能够高效地计算出任意整数次幂的结果。同时,为了解决double类型数据在比较时可能出现的误差,引入了一个精度阈值来判断两个浮点数是否相等。

被折叠的 条评论
为什么被折叠?



