📜  如何在 js 中使用任意数字 root - Javascript (1)

📅  最后修改于: 2023-12-03 15:08:40.449000             🧑  作者: Mango

如何在 JS 中使用任意数字 root

在 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;
}

该函数只接受一个参数,即待求的数字。

总结

两种方法实现起来都比较简单,可以根据自己的需求来选择。牛顿迭代法迭代次数更少,更易于理解,但是对于特别大的数字,可能会有问题。而二分查找法则可以处理任意数字,但是实现稍微复杂一些。