描述
实现sqrt
解决
牛顿迭代法,利用迭代公式
fn+1=(fn+1+x/fn)/2.0;
令初始值为 (x + 1) / 2
, 因为对于非负数x,有(x+1) / 2 >= sqrt(x)
。
当x = INT_MAX
时溢出,故最后判断了正负。
class Solution {
public:
int mySqrt(int x) {
if (x == 0)
return 0;
const double zz = 1e-5;
double f1 = (x + 1) / 2;
double f2 = (f1 + x / f1) / 2.0;
while (fabs(f1 - f2) > zz)
{
f1 = f2;
f2 = (f1 + x / f1) / 2.0;
}
return f1 > 0 ? f1 : -f1;
}
};