在 JavaScript 中计算 (m)1/n 的值

javascriptsap web dynprofront end technology

在 JavaScript 编程领域,计算 (m) 的 1/n 次方值的能力非常重要,因为它使开发人员能够精确高效地执行复杂的数学运算。利用 JavaScript 的计算能力,本文深入探讨了计算此类指数值的复杂性。通过探索底层算法和使用很少使用的数学函数,我们将为开发人员提供在 JavaScript 程序中无缝执行这些计算所需的知识和工具。加入我们的启蒙之旅,揭开计算 (m) 的 1/n 次方的秘密,使开发人员能够以全新的信心应对数学挑战。

Math.pow() 函数

Math.pow() 函数是 JavaScript Math 对象中的内置函数,可用于计算底数的幂次方。它需要两个参数:底数和指数。

使用 Math.pow() 的语法如下 −

Math.pow(base, exponent);

这里,base 表示要提升幂的数字,exponent 表示要提升底数的幂。

问题陈述

给定两个正整数,一个底数整数 m 和一个指数整数 n,确定 m 的 n 次方根的值,表示为 m^(1/n)。返回四舍五入到最接近的整数的结果。

示例输入 −

m = 64, n = 3

示例输出 −

4

方法

在本文中,我们将看到在 JavaScript 中解决上述问题陈述的多种不同方法 −

  • Math.pow 和 Math.exp

  • 牛顿法

  • 二分搜索

方法 1:Math.pow 和 Math.exp

此方法使用Math.pow() 函数用于计算数字的 n 次方根。它仅涉及一行代码:root = Math.pow(m, 1/n)。通过将 m 提升到 1/n 次方,它直接计算所需的根。此方法方便直接,无需自定义寻根算法即可快速解决问题。

示例

在此代码片段中,使用 Math.pow() 函数计算给定数字的 n 次方根。使用公式 Math.pow(m, 1/n),其中 m 表示要求根的数字,n 表示根的阶。结果值存储在 root 变量中,随后显示在控制台上。

let m = 27;
let n = 3;
let root = Math.pow(m, 1/n);
console.log(root);

输出

以下是控制台输出 −

3

方法 2:牛顿法

牛顿法是一种用于近似函数根的迭代算法。当求数字 m 的 n 次方根时,我们采用牛顿法,从 m/n 的初始猜测开始。然后,该算法使用公式 x = ((n - 1) * x + m / Math.pow(x, n - 1)) / n 迭代地细化猜测。迭代持续进行,直到 Math.pow(x, n) 和 m 之间的差小于指定的容差。得到的 x 值表示 m 的近似 n 次方根。

示例

​​nthRoot 函数计算给定数字 (m) 的 n 次方根,精度(容差)可选。根的初始猜测值设置为 m 除以 n。通过 while 循环,猜测值会不断迭代优化,直到 Math.pow(x, n) 和 m 之间的差值小于容差。每次迭代都采用牛顿法公式来获得更好的近似值:x = ((n - 1) * x + m / Math.pow(x, n - 1)) / n。最终返回根的最终近似值。

function nthRoot(m, n, tolerance = 0.0001) {
   let x = m / n; // Initial guess

   while (Math.abs(Math.pow(x, n) - m) > tolerance) {
      x = ((n - 1) * x + m / Math.pow(x, n - 1)) / n;
   }
   return x;
}
let m = 27;
let n = 3;
let root = nthRoot(m, n);
console.log(root);

输出

以下是控制台输出 −

3.000000068671529

方法 3:二分查找

二分查找方法用于查找数字 m 的 n 次方根。它用 low = 0 和 high = max(1, m) 初始化搜索范围。通过计算中点作为 mid,它通过将 mid 提升到 n 次方来确定 guess 的值。根据 guess 是大于还是小于 m,更新 low 或 high 值,将搜索范围减半。迭代继续,直到 high 和 low 之间的差异小于指定的容差。mid 的最终值近似于 m 的 n 次方根。

示例

nthRoot 函数以 m、n 和可选的容差作为参数。low 和 high 变量分别初始化为 0 和 max(1, m)。while 循环继续,直到 high 和 low 之间的差异大于容差。在每次迭代中,都会计算中点 (mid)。 guess 变量存储 mid 的 n 次方。根据 guess 是否大于或小于 m,更新低值或高值以缩小搜索范围。当循环结束时,最终的 mid 值将作为 m 的近似 n 次方根返回。

function nthRoot(m, n, tolerance = 0.0001) {
   let low = 0;
   let high = Math.max(1, m);
   let mid;

   while (high - low > tolerance) {
      mid = (low + high) / 2;
      let guess = Math.pow(mid, n);

      if (guess < m) {
         low = mid;
      } else if (guess > m) {
         high = mid;
      } else {
         break;
      }
   }
   return mid;
}
let m = 27;
let n = 3;
let root = nthRoot(m, n);
console.log(root);

输出

以下是控制台输出 −

3.000040054321289

结论

最后,在 JavaScript 中计算 (m) 的 1/n 次方值的过程提出了一个有趣的计算挑战,可以通过实施适当的算法优雅地解决。这种数学运算虽然不太常见,但在密码学、科学建模和数据分析等各个领域都具有重要意义。通过利用 JavaScript 的强大功能并采用精确的方法,程序员可以有效地计算这个表达式,释放新的可能性并增强复杂应用程序的开发能力。总之,掌握 JavaScript 中 (m) 的 1/n 次方的计算可以扩展程序员可以使用的数学运算范围,促进创新并实现复杂数学概念在 Web 开发领域的实现。


相关文章