【发布时间】:2017-01-18 19:55:05
【问题描述】:
我正在使用二进制搜索来编写一个简单的平方根计算器,它在 Java 中接受双精度数。但是,当我尝试通过在主函数中打印出答案来测试我的代码时,终端中没有打印出任何内容。我也收到错误Possible lossy conversion from double to float......
这是我的代码:
public class MyMath{
public static double sqrt(double n){
double u = 1;
double l = 0;
float m = (u + l) / 2;
double norm_input = 1;
float acc = 0.00000000001;
double answer = 0;
if ((n > 0) && (n < 1)){
if ((m * m) < n){
l = m;
}else{
u = m;
}
answer = (u + l) / 2;
return answer;
}else{
int count = 0;
while (n > 1){
n = n / 4;
norm_input = norm_input * 2;
count++;
}
while ((u - l) > acc){
if ((m * m) < n){
l = m;
}else{
u = m;
}
}
answer = (u + l) / 2 * norm_input;
return answer;
}
}
public static void main(String[] args){
double a = new MyMath().sqrt(4);
System.out.println(a);
}
}
【问题讨论】:
-
为什么是
m和accfloats?更好的名称也可能有助于提高可读性。我猜你的 while 循环不会终止。顺便说一句:你知道Math.sqrt了吗? -
尝试只使用一种类型作为开始,然后在第二个 while 循环周围调试您的代码。
-
绝对是一个无限循环。您应该学习使用 IDE 的调试器。小提示
while ((u - l) > acc)是有问题的,因为u和l从未真正改变它们的值。 -
m 是上界和下界之间的中点,acc 是更好近似的准确度。我知道
Math.sqrt,但我不能用它来做作业…… -
while ((u - l) > acc) 是无限循环。在循环 l=m 条件下,两者具有相同的值 0.5,因此 'l' 的值不会改变。
标签: java