z*********8 发帖数: 2070 | |
i********y 发帖数: 153 | 2 public double sqrt(double x) {
double epsilon = 0.000001;
if (x < 0) {
throw new IllegalArgumentException();
}
double low = 0;
double high = x;
while (Math.abs(low-high) >epsilon) {
double mid = low + (high - low) / 2;
double divident = x / mid;
if (Math.abs(divident - mid)
return mid;
} else if (divident < mid) {
high = mid;
} else {
low = mid;
}
}
return low;
} |
z*********8 发帖数: 2070 | 3 这个x<1的时候不对吧?
【在 i********y 的大作中提到】 : public double sqrt(double x) { : double epsilon = 0.000001; : if (x < 0) { : throw new IllegalArgumentException(); : } : : double low = 0; : double high = x; : while (Math.abs(low-high) >epsilon) { : double mid = low + (high - low) / 2;
|
z*********8 发帖数: 2070 | 4 输入double.MaxValue 陷入死循环了。。。 |
s********u 发帖数: 1109 | |
z*********8 发帖数: 2070 | |
n****e 发帖数: 678 | 7 double sqrt(double x) {
if (x == 0.0) {
return 0.0;
}
double curr = 1.0;
double prev = 0.0;
while (curr != prev) {
prev = curr;
curr = (x/prev + prev)/2;
}
return curr;
} |
l*n 发帖数: 529 | 8 对double能直接!=,你这是要哪样啊!
【在 n****e 的大作中提到】 : double sqrt(double x) { : if (x == 0.0) { : return 0.0; : } : double curr = 1.0; : double prev = 0.0; : while (curr != prev) { : prev = curr; : curr = (x/prev + prev)/2; : }
|
n****e 发帖数: 678 | 9 自己试着run了一下,没问题啊
请大牛指教一下,为什么不能直接!=
【在 l*n 的大作中提到】 : 对double能直接!=,你这是要哪样啊!
|
l*n 发帖数: 529 | 10 用double的进行equals/not equals比较可能让你进入死循环。run一下没问题不代表所
有都没问题。
【在 n****e 的大作中提到】 : 自己试着run了一下,没问题啊 : 请大牛指教一下,为什么不能直接!=
|
n****e 发帖数: 678 | 11 多谢你的回复啊!
我去研究一下epi的答案。
【在 l*n 的大作中提到】 : 用double的进行equals/not equals比较可能让你进入死循环。run一下没问题不代表所 : 有都没问题。
|