下面的代码使用Heron的方法返回平方根。我试图找出其中的"bug“,但老实说,我还没能发现它。我有一个关于"var prevGuess = n“语句的问题。第一次"n“是如何工作的?这就是bug,什么是“修复”?
谢谢,我现在有点糊涂了……
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;
}发布于 2013-08-08 00:14:27
以下是一个工作版本:
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”的大小成比例。如果你用很大的数字来尝试,它可能不会收敛。
https://stackoverflow.com/questions/18108286
复制相似问题