我使用二进制搜索来编写一个简单的平方根计算器,它在Java中输入双精度数。但是,当我尝试通过在main函数中打印出答案来测试我的代码时,终端中没有打印出任何内容。我也有错误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);
}
}
答案 0 :(得分:3)
它在第二个条件下陷入无限循环状态,这就是它没有将值打印到控制台的原因。
答案 1 :(得分:1)
float m = (u + l) / 2;
在这里你必须输入cast into float,因为当两个数据类型变量参与除法时,结果将是更高的数据类型。
float acc = 0.00000000001;
这里也有类型转换,因为默认情况下java将小数点值视为Double。
while ((u - l) > acc){
if ((m * m) < n){
l = m;
}
}
这里你的代码将无限循环。