苍鹭的方法JavaScript

时间:2013-08-07 16:06:35

标签: javascript

以下代码应该使用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;
}

1 个答案:

答案 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”的大小成比例。如果您尝试使用大量数字,它可能不会收敛。