piapia123
zh

蒙特卡罗方法估算 π

生成器

所有处理都在浏览器本地完成,数据不上传服务器

输出

原理一句话:往边长为 1 的正方形里随机撒点,落在四分之一圆内的比例约等于 π/4 —— 因为四分之一圆的面积是 π/4,正方形是 1。所以 `π ≈ 4 × 圆内点数 ÷ 总点数`。 精度只有 1/√n 量级,这件事必须说清楚。 误差随样本数的平方根下降:想多一位小数,样本要乘 100。一百万个点大约稳定到 3 位小数,一亿个点才 4 位 —— 而查 π 的位数那个工具能直接给出小数点后一万位。所以这个工具的价值不在算 π,而在于:它是蒙特卡罗方法最小的可运行例子,而且能看到「每加一个数量级的样本,只换来一位小数的稳定」。 为什么给出收敛过程而不只给一个数。 只给最终值,你分不清这次估计是凑巧还是真的收敛了。按 10 的幂列出累计估计值,一眼能看到它怎么一点点靠近 3.14159…,也能看到那几个数是怎么抖的。 随机源是 `crypto.getRandomValues`,不是 `Math.random`。

功能

  • 按「落在四分之一圆内的比例 × 4」估算 π
  • 给出样本点数、圆内点数、π 估计值与相对误差
  • 按 10 的幂列出收敛过程,一眼看出精度是怎么爬的
  • 样本数可调,最大两百万个点(约一秒)
  • 误差按相对值给出,可直接与「1/√n」量级对照
  • 随机源取自 `crypto.getRandomValues`,且在数与数之间不重复取用
  • 每次结果略有不同,点「重新估算」换一批
  • 全部在本机计算,不请求任何接口

使用方法

  1. 填样本点数(默认一百万个)
  2. 读结果区的估计值与相对误差
  3. 往下看收敛过程,能看到样本量每加一个数量级的变化
  4. 点「重新估算」换一批随机点再跑一次

常见问题

为什么估计值总在 3.14 附近抖,不能像查表那样精确?
这是方法本身的性质,不是实现的缺陷。蒙特卡罗的误差按 1/√n 下降 —— 样本数加 100 倍,误差才降到十分之一。一百万个点的相对误差通常在 0.1% 上下,也就是约 3 位小数的稳定。想要精确的 π,用常数位数那个工具,它直接给出内置的一万位。
这个工具有什么用?
两个用处。其一,它是蒙特卡罗方法最小的可运行例子 —— 读一遍原理就能懂,而它演示的「用随机采样估计一个确定的量」正是金融定价、物理模拟、贝叶斯推断里那套方法的原型。其二,它让「精度爬得有多慢」这件事变得可见:表格里 1000 个点和 100 万个点的估计值差不了太多,而样本翻了 1000 倍,这种直觉光看公式建立不起来。
样本数选多少合适?
看你想看什么。只想看看收敛的样子,一万个点就够(瞬时出结果)。想看接近 3.14159 的估计,一百万个点大约需要一两百毫秒,误差通常落在 0.1% 以内。两百万是上限 —— 再多的收益是这个方法的性质决定的(√n 那一档),而等待时间会明显变长。

相关工具