题目: 求解数a的平方根的一种方法为:先给求解结果指定一个粗略的猜测结果x,然后使用以下公式对其求解结果。
x1=(x0+a/x0)/2
比如,如果要找9的平方根,首先给出猜测值6,即x=6,然后应用公式得x1=3.75,此值更接近正确结果。重复利用这个公式,很快可以得出结果。
要求: 编写一个方法,该方法接受一个双精度型的参数并返回该参数的近似平方根。可以使用a/2作为初始的猜测值,迭代终止的条件为|Xn-Xn-1|<0.0001.使用Math.abs来计算绝对值。
java代码:
package squareRoot;
import java.util.Scanner;
public class squareRoot {
public static void main(String[] args) {
System.out.println("please enter a number of double type");
Scanner in = new Scanner(System.in);
double num = in.nextDouble();
squareRoot(num);
}
//通过迭代求一个数的平方根
public static void squareRoot(double a) {
int i=0;
double z = a-a/2;
double y=0;
double x=a/2;
while(z>0.0001) {
y = (x+a/x)/2;
z = Math.abs(y-x);
x=y;
i++;
System.out.println(i+" "+y);
}
System.out.println("the result: "+y);
}
}
结果演示:
please enter a number of double type
190.2
1 48.55
2 26.233805355303808
3 16.741996281572128
4 14.051324333707054
5 13.793707494215955
6 13.791301816263989
7 13.791301606447451
the result: 13.791301606447451
- 1、这个程序之前写出来一直提示错误,错误在于内存溢出。原因是迭代错误,终止条件不满足,循环体不正确,所以不断迭代。
- 2、这个程序就在于说计算Xn时,需要使用Xn-1。这个赋值一定要正确,循环的条件也很简单,使用两值差的绝对值就好。