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


在 JavaScript 程式設計領域,計算 (m) 的 1/n 次方值具有重要意義,因為它使開發者能夠精確高效地執行復雜的數學運算。本文利用 JavaScript 的計算能力,深入探討計算此類指數值的細節。透過探索底層演算法和運用鮮為人知的數學函式,我們將為開發者提供必要的知識和工具,以便在其 JavaScript 程式中無縫地執行這些計算。讓我們一起揭開計算 (m) 的 1/n 次方的秘密,讓開發者能夠充滿信心地應對數學挑戰。

Math.pow() 函式

Math.pow() 函式是 JavaScript Math 物件中的內建函式,允許您計算底數的冪次方。它接受兩個引數:底數和指數。

使用 Math.pow() 的語法如下:

Math.pow(base, exponent);

這裡,base 表示您要提升到冪的數字,exponent 表示您要提升 base 數字的冪。

問題陳述

給定兩個正整數,底數整數 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,更新 low 或 high 值以縮小搜尋範圍。迴圈結束後,返回最終的 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 開發領域實現複雜的數學概念成為可能。

更新於:2023年8月4日

瀏覽量:132

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告