计算平方根(牛顿迭代法)

现在在大多数编程语言中已经有很多数学函数、类库等提供sqrt()方法,我们想要求平方根直接调用sqrt()就可以了

在这里介绍一下牛顿迭代法

算法思想:

假设a。欲求a的平方根,首先猜测一个值X1=a/2,然后根据迭代公式X(n+1)=(Xn+a/Xn)/2,算出X2,再将X2代公式的右边算出X3等等,直到连续两次算出的Xn和X(n+1)的差的绝对值小于某个值,即认为找到了精确的平方根。

package Test;

/*
 * @ly
 * 计算平方根(牛顿迭代法)
 */
import java.util.*;

public class Sqrt {
    public static double sqrt(double c)
    {
    	if(c<0)  
    	return Double.NaN;	 //保存double类型的最小正标准的常量
    	double err = 1e-15;
    	double t = c;
    	while(Math.abs(t-c/t)>err*t)  
    	{
    		t = (c/t+t)/2.0;
    	}
    	return t;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        double x = input.nextDouble();
		System.out.println(sqrt(x));
		input.close();
	}

}
package Test;

/*
 * @ly
 * 计算平方根(牛顿迭代法)
 */
import java.util.*;

public class Sqrt {
    public static double sqrt(double c)
    {
    	if(c<0)  
    	return Double.NaN;	 //保存double类型的最小正标准的常量
    	double err = 1e-15;
    	double t = c;
    	while(Math.abs(t-c/t)>err*t)  
    	{
    		t = (c/t+t)/2.0;
    	}
    	return t;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner input = new Scanner(System.in);
        double x = input.nextDouble();
		System.out.println(sqrt(x));
		input.close();
	}

}

运行结果:

猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/81119311