当前位置:首页>python>Python中用random撒点求π,真的靠谱吗?

Python中用random撒点求π,真的靠谱吗?

  • 2026-09-29 21:52:28
Python中用random撒点求π,真的靠谱吗?
先看一段动画

蒙特卡洛求 π:撒点估算圆周率

在 1×1 正方形里随机撒点,落在四分之一圆内的比例 ≈ π/4,所以 π ≈ 4×(圆内点数/总点数)。点"撒 500 点",看估计值怎么随点数增多逼近 3.14。

import randomtotal = 500inside = 0for _ in range(total):    x, y = random.random(), random.random()    if x**2 + y**2 <= 1:        inside += 1pi = 4 * inside / totalprint(f"总点数 {total},圆内 {inside},π ≈ 4×{inside}/{total} = {pi:.4f} (真值 3.1416,点越多越准)")
我们常用以上代码作为Python中random库的经典案例,可如果你仔细观察这段动画,你就会发现:
用 random 库估算出来的 π 不仅不准确,甚至还相差甚多;
更不是“点越多越准”:
仔细看,这段动画里出现了一个明显的非线性关系。
那这究竟是为什么呢?

Python 的 random 模块,底层跑的是一个叫"梅森旋转"的数学公式。

它的逻辑非常简单:喂进去一个种子,吐出来一串数字。

种子一样,吐出来的数字就一模一样——不管你换哪台电脑、跑多少次,结果永远不变。

而真随机的核心特征恰恰是不可复现、不可预测。

所以 random 生成的随机数,本质上就是一串"看起来很乱、实则完全确定"的数字。它只是"伪装"成了随机,并不是真正的随机。

维度
假随机(伪随机)
真随机
生成原理
数学算法+固定种子
物理世界的不可预测现象
是否可预测
知道种子和算法就能100%预测
理论上完全不可预测
是否可复现
相同种子必然生成相同序列
永远无法复现同一串数字
生成速度
极快,几乎不占性能
较慢,依赖硬件采集物理信号
典型场景
游戏抽卡、模拟测试、普通抽奖
密码加密、密钥生成、金融安全

我们常说的随机,基本上都是这样的 “伪随机”。

下次抽卡如果又是大保底,或许你可以想想,它真的是随机吗?

也许只有你所处的现实生活,才是真正的随机。

最新文章

随机文章