有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

牛顿平方根Java程序

我写这个程序是为了展示牛顿求平方根的方法,然后运行数学函数来求平方根,然后把它们都打印出来。数学部分工作得很好,但是我创建的循环没有给出牛顿法的正确平方根。有什么想法吗?提前谢谢

package newton_sqrt;

import java.util.Scanner;

public class Newton_sqrt {

    public static void main(String[] args) {

        double guess, new_guess, last_guess, accuracy, n, x, absolutex;

        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter in N for Newton: ");
        n = keyboard.nextDouble();
        last_guess = n / 2;
        do {
            new_guess = ((n/last_guess) + last_guess)/2;
            x = new_guess - last_guess;
            if(x>=0)
                absolutex=x;
            else
            absolutex=-x;
        } while(absolutex < .000001);
        System.out.println("Newton = " +new_guess);
        double mth = Math.sqrt(n);
        System.out.println("Math.sqrt = " +mth);    
    }
}   

共 (2) 个答案

  1. # 1 楼答案

    反转循环条件。当absolutex比epsilon大时,您希望循环,而不是当它小时。当它足够小时,您希望停止

    do {
    } while(absolutex > .000001);
    
  2. # 2 楼答案

    看起来数学部分需要一些调整,循环条件也是如此。试试看,它很管用

    package newton_sqrt;
    
    import java.util.Scanner;
    public class Newton_sqrt {
        public static void main(String[] args) {
            // TODO code application logic here
            double guess, new_guess = 0, last_guess, accuracy, n, x, absolutex;
    
            Scanner keyboard = new Scanner(System.in);
            System.out.println("Enter in N for Newton: ");
            n = keyboard.nextDouble();
            last_guess = n / 2;
    
            do {
                new_guess = last_guess - (last_guess*last_guess-n) / (2*last_guess);
                x = Math.abs(last_guess - new_guess);
                if (x < .000001) {
                    break ;
                } else {
                    last_guess = new_guess;
                }
            } while (n >= .00);
    
            System.out.println("Newton = " + new_guess);
            double mth = Math.sqrt(n);
            System.out.println("Math.sqrt = " + mth);
    
        }
    
    }