以下代码应该使用Heron的方法返回平方根。我试图在其中找到一个“虫子”,但说实话,我一直无法发现它。我有一个关于“var prevGuess = n”语句的问题。 “n”第一次如何工作?这是错误,什么是“修复?”
谢谢,我现在有点困惑......
function heronSqrt(n)
{
var DELTA = 1.0E-10;
var nextGuess;
var prevGuess = n;
do
{
nextGuess = (prevGuess + (n/prevGuess))/2;
prevGuess = nextGuess;
} while (nextGuess-prevGuess > DELTA)
return nextGuess;
}
答案 0 :(得分:3)
这是一个工作版本:
function heronSqrt(n)
{
var DELTA = 1.0E-10;
var nextGuess = n;
var prevGuess;
do
{
prevGuess = nextGuess;
nextGuess = (prevGuess + (n/prevGuess))/2;
} while (Math.abs(nextGuess-prevGuess) > DELTA)
return nextGuess;
}
有两个问题。首先,您在进行限制检查之前更新了“prevGuess”。其次,您需要检查猜测之间差异的绝对值。我更改了初始化,以便将“nextGuess”初始化为输入值,将更新移动到“prevGuess”到循环的第一行,然后我将调用添加到Math.abs()
。
为了使这个值适用于更大范围的值,我认为你需要让“DELTA”的值与“n”的大小成比例。如果您尝试使用大量数字,它可能不会收敛。