请帮助我编写一个使用以下公式计算正实数的平方根的函数:
x i+1 = (1/2) * (xi + (A / x1)),
其中'A'-输入实数。
在零迭代中,采用下一条语句x0 = A 错误至少应为10-6
输出
sqrt (2) = 1.414
sqrt (9) = 3
sqrt (25) = 5
答案 0 :(得分:5)
您可以采用x i (x
)和x i + 1 (x1
)的新值,并检查值是否相等。然后结束序列并返回该值。
开始时,您需要一个适当的值,例如给定值的一半。
function sqrt(a) {
var x,
x1 = a / 2;
do {
x = x1;
x1 = (x + (a / x)) / 2;
} while (x !== x1);
return x;
}
console.log(sqrt (2)); // 1.414
console.log(sqrt (9)); // 3
console.log(sqrt (25)); // 5
答案 1 :(得分:1)
您还可以使用二等分法-一种解决问题的更通用方法:
var sqrt = function(n) {
if (n<0) {
throw "are you kidding?! we are REAL here.";
}
if (n === 0) {
return 0;
}
var bisect = function(l,r) {
var avg = (l+r)/2;
if (r-l<0.00000001) {
return (l+r)/2;
}
if (avg*avg > n) {
return bisect(l, avg);
} else if (avg*avg < n) {
return bisect(avg, r);
}
}
return bisect(0, n < 1 ? 1 : n);
}