使用牛顿迭代法计算平方根

使用牛顿迭代法计算平方根

算法第四版 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的值接近的程度满足误差要求

日积月累,水滴石穿
原文地址:https://www.cnblogs.com/lonelyisland/p/14216426.html