如何在不使用 Javascript 中的库和内置方法的情况下计算平方根?
How to calculate the square root without using library and built-in methods in Javascript?
请帮我写一个函数,用公式计算正实数的平方根:
x i+1 = (1/2) * (xi + (A / x1)),
其中 'A' - 输入实数。
在零迭代中,下一个语句已被执行 x0 = A
误差至少应为 10-6
输出
sqrt (2) = 1.414
sqrt (9) = 3
sqrt (25) = 5
你可以取 xi (x
) 和 xi + 1 (x1
) 并检查值是否相等。然后结束系列和 return 该值。
开始时,您需要一个合适的值,例如给定值的一半。
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
您还可以使用二分法——一种更通用的求解问题的方法:
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);
}
请帮我写一个函数,用公式计算正实数的平方根:
x i+1 = (1/2) * (xi + (A / x1)),
其中 'A' - 输入实数。
在零迭代中,下一个语句已被执行 x0 = A 误差至少应为 10-6
输出
sqrt (2) = 1.414
sqrt (9) = 3
sqrt (25) = 5
你可以取 xi (x
) 和 xi + 1 (x1
) 并检查值是否相等。然后结束系列和 return 该值。
开始时,您需要一个合适的值,例如给定值的一半。
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
您还可以使用二分法——一种更通用的求解问题的方法:
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);
}