- 先保持四种算法全部选中,用默认目标跑一次。
- 不要只看赢家卡片,要同时看图表和比较表,理解差距是怎么拉开的。
- 想复用课堂设置时,可以读取其他示例,或直接复制 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 实现。
计算在当前浏览器中进行。分享 URL 只包含设置,不会自动运行。网站统计详情请参阅隐私政策。 (隐私政策)
图表和 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 会包含采样点以及每种算法唯一的最终行与状态。