Java 平方根计算器?

Java square root calculator?

好的,我是 java 的初学者,通过网站和书籍自学。我尝试了一个带有 for 循环和 while 循环的简单平方根计算器(我在下面包含了我尝试过的内容)。可悲的是,当我输入数字时,我所有的代码都被终止了。如有任何帮助,我们将不胜感激!

import java.util.Scanner;

public class The2RootProdject {
    public static void main(String args[]) {

        Scanner input = new Scanner(System.in);
        double rootIt = input.nextDouble();
        double dummy = 0.0000000;

        while (dummy != dummy * dummy) {
            dummy += 0.0000001;
            if (rootIt == dummy * dummy) {
                System.out.println("the squar root of " + rootIt + " is "
                        + (dummy * dummy));
            }

        }

    }
}

你这里有几个问题:

1) 逻辑错误:0 == 0 * 0

<= 这意味着 while (dummy != dummy * dummy) {..} 永远不会不正确,你甚至永远不会进入循环

2) 浮点数 不精确 ,因此您的算法(依赖于“==”)可能无法正常工作

在此处查看有关浮点不精度的更多详细信息:

http://www.lahey.com/float.htm

对于任何语言都是如此 - 您的平方根算法必须考虑到这一点。

我认为 while 条件应该是 =

while(rootIt != dummy * dummy) {} 

只有将 dummy 初始化为 1,您的当前条件才会永远为真;但我不认为这就是你想要的。

尝试使用这个使用牛顿迭代的算法:

import java.util.Scanner;

public class Main
{
    public static void main(String args[])
    {
        double number, t, squareRoot;
        Scanner input = new Scanner(System.in);
        number = input.nextDouble();
        squareRoot = number / 2;
        do
        {
            t = squareRoot;
            squareRoot = (t + (number / t)) / 2;
        }
        while ((t - squareRoot) != 0);

        System.out.println(squareRoot);
    }
}

牛顿迭代法是一种通过递归方程计算数字平方根的算法: X(n+1) = (X(n) + number/X(n))/2