- 先保持四種演算法全部選中,用預設目標跑一次。
- 不要只看赢家卡片,要同時看圖表和比較表,理解差距是怎麼拉開的。
- 想複用課堂設定時,可以讀取其他範例,或直接複製 URL。
課堂範例:先用四種演算法一起跑,再切換到較短的目標位數做第二輪比較。
用同一時間預算比較各演算法最終能達到多少一致位數。
這個模式比較的是:誰最先達到同一個位數目標。
數值越小,圖表點越密;數值越大,日誌和 CSV 會更簡潔。
第一次建議四種演算法都保留,差距會最清楚。
競速圖表
橫軸是經過時間,縱軸是一致位數。這個圖主要用來看趨勢,不適合當作不同設備之間的絕對效能測試。
比較表
| 演算法 | 估計值 | 絕對誤差 | 一致小數位 | 迭代次數 | 實際經過 ms | 計算經過 ms | 狀態 |
|---|
四種演算法與比較限制
- Gregory–Leibniz 級數:
4 × (1 − 1/3 + 1/5 − …)。結構容易理解,但要增加正確小數位,需要非常多項。 - Nilakantha 級數:
3 + 4/(2·3·4) − 4/(4·5·6) + …。通常比 Gregory 收斂得快。 - Machin 公式:
16 arctan(1/5) − 4 arctan(1/239)。目前實作會用級數計算這個經典 Machin 恆等式。 - Chudnovsky 公式: 收斂非常快。這裡使用 JavaScript Number 的輕量實作,並不是大量位數產生器所用的 BigInt/binary splitting 實作。
計算會在目前瀏覽器中執行。分享網址只包含設定,不會自動執行。網站數據分析詳情請參閱私隱政策。 (私隱政策)
圖表與 CSV 會按所選間隔保留取樣點,並保證包含每種演算法的最終點。
教學提示
- 想講“同樣投入不等於同樣結果”時,用固定時間最直觀。
- 想講“達到同一目標的速度差”時,用固定目標位數更清楚。
- Gregory 的價值正正在於它很慢,能讓收斂過程被看見。
- Chudnovsky 在這裡通常會很快领先,但這一頁仍然把它當作比較對象,不是大規模出位數的頁面。
講義與板書準備
常見問題
固定時間的 1,000 ms 是整場競速的總時間嗎?
不是。這個預算會分別套用到每種已選演算法,而且演算法依次執行。選擇四種演算法時,1,000 ms 的設定通常代表整次執行約需 4 秒或更久。
如何判定獲勝、並列及無人達標?
固定時間會先選出一致小數位最多的演算法,再按絕對誤差判定領先;精度及比較誤差都可視為相同時判為並列。固定小數位只在達到目標的演算法中選最快者;若無人達到,就不設勝出者,只顯示最接近目標的方法。
一致的小數位數是甚麼意思?
整數部分的 3 不列入。它表示小數點後由左開始、按頁面說明的捨入規則與參考圓周率連續相同的位數,並受 JavaScript Number 精度上限限制。
絕對誤差顯示為 0,是否代表得到數學上精確的圓周率?
不是。這只表示估計值被捨入為與 Math.PI 相同的雙精度數值,並不代表它與真正的無理數圓周率之間沒有誤差。
迭代次數越少,就一定越有效率嗎?
不能直接這樣比較。Gregory 的一項、Machin 的一次更新及 Chudnovsky 的一項,計算量和增加的資訊量都不同。迭代次數主要表示各方法內部的進度。
為甚麼 Gregory 慢,而 Chudnovsky 快?
Gregory 每增加一項只改善一點;Chudnovsky 則設計成每項可增加許多正確位數。不過實際耗時仍會受實作方式及裝置效能影響。
換一部裝置或瀏覽器,獲勝者會相同嗎?
不一定。CPU、瀏覽器引擎、分頁負載、電源模式、計時精度及排程都會改變時間結果。應把它用於觀察收斂趨勢,而不是宣稱普遍最快。
停止、分享 URL 及匯出 CSV 會保存甚麼?
停止會建立一份標明未完成的完整快照。分享 URL 只保存正規化設定,不會自動執行。CSV 會包含取樣點,以及每種演算法唯一的最終列及狀態。