求一个数的平方根算法

题目: 求解数a的平方根的一种方法为:先给求解结果指定一个粗略的猜测结果x,然后使用以下公式对其求解结果。

x1=(x0+a/x0)/2

比如,如果要找9的平方根,首先给出猜测值6,即x=6,然后应用公式得x1=3.75,此值更接近正确结果。重复利用这个公式,很快可以得出结果。

要求: 编写一个方法,该方法接受一个双精度型的参数并返回该参数的近似平方根。可以使用a/2作为初始的猜测值,迭代终止的条件为|Xn-Xn-1|<0.0001.使用Math.abs来计算绝对值。

java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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);
}
}

结果演示:

1
2
3
4
5
6
7
8
9
10
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。这个赋值一定要正确,循环的条件也很简单,使用两值差的绝对值就好。