Python实现Monte Carlo simulation估算π结果偏高问题排查
错误原因
你的代码存在明确逻辑错误,和内置函数精度无关,错误点如下:
- 落点判定逻辑完全错误:蒙特卡洛估算π的核心是判断随机生成的点是否落在单位圆内,正确判定条件为点到圆心的距离平方小于等于半径平方(即
x² + y² ≤ 1),你代码中计算x*y和落点判定没有任何关联。 - 存在循环论证问题:你在判定阈值中直接使用了
math.pi计算圆面积,相当于提前把正确π值代入了估算逻辑,完全违背了蒙特卡洛方法的设计初衷。 - 坐标范围不符合要求:
random.random()生成的是[0,1)区间的随机数,而单位圆的外接正方形坐标范围是[-1,1],需要对生成的随机数做线性转换才能覆盖整个正方形区域。
修正后代码
import random TOTAL_POINTS = 1000000 def main(): number_of_hits = 0 for _ in range(TOTAL_POINTS): # 将[0,1)区间的随机数转换为[-1,1)区间 x = 2 * random.random() - 1 y = 2 * random.random() - 1 # 判断点是否落在单位圆内 if x ** 2 + y ** 2 <= 1: number_of_hits += 1 print("pi is approximately", 4 * number_of_hits / TOTAL_POINTS) main()
修正后运行得到的π估算值会在3.14附近浮动,符合预期。
内容的提问来源于stack exchange,提问作者KishuInu
相关产品推荐
相关产品推荐

