代码如下:
public static double sqrt(double c)
{
if(c < 0)
{
return Double.NaN;
}
double err = 1e-15;
double t = c;
while(Math.abs(t - c/t) > err*t)
{
t = (c/t + t)/2.0
}
return t;
}
转载自:http://www.guokr.com/question/461510/ 结合https://www.zhihu.com/question/20690553 来理解
牛顿开方法是牛顿迭代法在开平方上的应用,牛顿迭代法同时也能快速逼近很多方程的解,自然可以用来开任意平方。
求,即求的正根。
更一般地,求,即求的正根。
注意牛顿迭代法只能逼近解,不能计算精确解。不过实际应用中,我们都不要求绝对精确的解,例如计算器得出结果也不需要给出无限位,只需要给出十几位小数就足够了,所以牛顿迭代法被广泛用在各种科学计算中。
【牛顿迭代法】
假设方程 在 附近有一个根,那么用以下迭代式子:
依次计算、、、……,那么序列将无限逼近方程的根。
牛顿迭代法的原理很简单,其实是根据f(x)在x0附近的值和斜率,估计f(x)和x轴的交点,看下面的动态图:
【用牛顿迭代法开平方】
令:
所以f(x)的一次导是:
牛顿迭代式:
随便一个迭代的初始值,例如,代入上面的式子迭代。
例如计算,即a=2。
……
计算器上可给出