首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heron方法JavaScript

Heron方法JavaScript
EN

Stack Overflow用户
提问于 2013-08-08 00:06:35
回答 1查看 377关注 0票数 6

下面的代码使用Heron的方法返回平方根。我试图找出其中的"bug“,但老实说,我还没能发现它。我有一个关于"var prevGuess = n“语句的问题。第一次"n“是如何工作的?这就是bug,什么是“修复”?

谢谢,我现在有点糊涂了……

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2013-08-08 00:14:27

以下是一个工作版本:

代码语言:javascript
复制
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”的大小成比例。如果你用很大的数字来尝试,它可能不会收敛。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18108286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档