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
好的,我是 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