【发布时间】:2016-04-08 13:27:37
【问题描述】:
通过逐次逼近确定平方根是使用以下算法实现的:
首先猜测平方根是 x / 2。将这个猜测称为 g。
实际平方根必须位于 g 和 x/g 之间。在逐次逼近的每一步,通过平均 g 和 x/g 生成一个新的猜测。
重复步骤 2,直到 g 和 x/g 的值在硬件精度允许的范围内尽可能接近。在 Java 中,检查这种情况的最佳方法是测试平均值是否等于用于生成它的任何一个值。
真正让我困惑的是第三步的最后一句话。我是这样解释的:
private double sqrt(double x) {
double g = x / 2;
while(true) {
double average = (g + x/g) / 2;
if(average == g || average == x/g) break;
g = average;
}
return g;
}
这似乎只会导致无限循环。我完全遵循算法,如果平均值等于 g 或 x/g(用于生成它的两个值),那么我们就有答案了吗?
【问题讨论】:
-
你用的是什么输入法?它似乎对我来说终止了......
-
以 2.23606797749979 为我终止
-
@kevmo314 好的,这很奇怪。我不知道为什么它没有为我终止。
-
也许我不应该使用 == 来比较双打?
标签: algorithm square-root