PRELOADER

不念过去 不负现在 不畏将来

当前文章 : 《求一个数的平方根算法》

12/4/2018 —— 

题目: 求解数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。这个赋值一定要正确,循环的条件也很简单,使用两值差的绝对值就好。