现在在大多数编程语言中已经有很多数学函数、类库等提供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();
}
}
运行结果: