使用牛顿迭代法计算平方根
算法第四版 1.1.6.1提到一个计算方法,代码如下:
public static double sqrt(double c)
{
if(c < 0) return Double.NaN;
double err = 1e-15;
while(Math.abs(t - c/t) > err * t)
t = (t + c/t) / 2.0;
return t;
}
公式简单推导
x2 = c, f(x) = x2 - c , f'(x) = 2 * x
err是误差的精度
xk+1 = xk - f(xk) / f'(xk) = xk - (xk2 - c) / (2xk) = 1/2 * (xk + c / xk)
结束条件
|t - c / t| <= err * t
<= |1 - c / t 2| <= err,即t2和c的值接近的程度满足误差要求