【发布时间】:2017-09-03 14:15:04
【问题描述】:
我一直在寻找用 JavaScript 编写的巴比伦平方根算法,并找到了这个可行的解决方案:
function sqrt(num) {
var accuracy = 0.000001;
function isPrecise(estimation) {
if (Math.abs( Math.pow(estimation, 2) - num ) < accuracy) {
return true
} else {
return false
}
}
function improvePrecision(estimation) {
return (estimation + (num / estimation)) / 2;
}
function iteration(estimation) {
if(isPrecise(estimation)) {
return estimation;
} else {
return iteration(improvePrecision(estimation));
}
}
return iteration(num);
}
但我看不到初始猜测(在代码中 - estimation)的值在哪里定义。那么它是如何工作的,当第一次迭代没有猜测值时?实际上,这个值应该等于num 参数。
【问题讨论】:
-
传入函数参数作为第一个猜测。是调用者做的。
-
对于
num的合理数字范围,实现看起来没问题。但我敢打赌,对于非常小的数字 (1e-20)、非常大的数字 (1e20)、零或负数,它会给出糟糕的结果或无限期地运行。
标签: javascript algorithm math