📅  最后修改于: 2023-12-03 15:08:40.449000             🧑  作者: Mango
在 JS 中计算任意数字的平方根是很常见的需求,它可以通过内置 Math 对象的 sqrt() 方法实现。但是,如果要计算任意数字的平方根,就需要自己实现一个函数。下面介绍两种实现方法。
牛顿迭代法是一种数值解法,常用于求解非线性方程组中的方程。它的思路是通过不断逼近函数的零点来求得方程的解。对于求解任意数字的平方根来说,可以将方程设置为:f(x) = x^2 - n = 0
,其中 n 为待求的数字,x 为其平方根。根据牛顿迭代法的公式,每次迭代的结果为:x = (x + n / x) / 2
。当迭代精度足够时,可以得到任意数字的平方根。
以下是通过牛顿迭代法实现的代码:
function sqrtNewton(n, precision) {
let x = n;
while (Math.abs(x * x - n) > precision) {
x = (x + n / x) / 2;
}
return x;
}
该函数接受两个参数,分别为待求的数字和迭代的精度。默认情况下,精度为 0.0001。可以通过修改 precision 参数来控制迭代精度。
二分查找法是一种常见的搜索算法,它的思路是通过对一个已排序的序列进行对半分割,不断缩小查找范围,最终找到目标元素。对于求解任意数字的平方根来说,可以利用二分查找法来搜索其整数部分。具体实现思路如下:
首先,设定左右边界,分别为 1 和 n。然后,每次取中间值 mid,将 n 除以 mid,判断其与 mid 的大小关系,以此来更新左右边界。当左右边界相遇时,即可得到任意数字的平方根。
以下是通过二分查找法实现的代码:
function sqrtBinarySearch(n) {
let left = 1;
let right = n;
let mid;
while (left <= right) {
mid = Math.floor((left + right) / 2);
if (n / mid < mid) {
right = mid - 1;
} else if (n / mid > mid) {
left = mid + 1;
} else {
return mid;
}
}
return right;
}
该函数只接受一个参数,即待求的数字。
两种方法实现起来都比较简单,可以根据自己的需求来选择。牛顿迭代法迭代次数更少,更易于理解,但是对于特别大的数字,可能会有问题。而二分查找法则可以处理任意数字,但是实现稍微复杂一些。