蒙特卡洛法估算π值为3.141592(100万次试验),核心是统计单位正方形内随机点落在内切单位圆中的比例(x²+y²≤1),再乘以4;使用mt_rand()生成[-1,1)浮点坐标,避免sqrt提升效率,确保浮点除法并用sprintf控制精度。

用PHP实现蒙特卡洛方法估算圆周率,核心是利用单位正方形内随机点落在其内切单位圆(半径为1,圆心在原点)中的概率 ≈ π/4。通过大量随机采样,统计落点比例再乘以4,即可逼近π。
生成随机点并判断是否在单位圆内
在边长为2的正方形(x, y ∈ [−1, 1])中均匀生成随机点;计算该点到原点距离的平方(避免开方提升效率):若 x² + y² ≤ 1,则点在单位圆内。
示例代码逻辑:
- 用 mt_rand() 配合浮点缩放生成 [−1, 1) 区间内的随机数(如:($rand / mt_getrandmax()) * 2 - 1)
- 用 mt_srand() 设置种子可提升随机性(尤其PHP 7.1+默认已自动播种,非必需但推荐显式调用)
- 每次循环只做一次平方和比较,不调用 sqrt(),减少浮点运算开销
控制试验次数并累计命中数
试验次数越多,结果越接近真实π值,但存在边际收益递减。通常取 10⁵ ~ 10⁷ 次较平衡精度与执行时间。
- 用 for 循环重复投点,用整型变量(如 $inCircle)累加落在圆内的次数
- 避免在循环内拼接字符串或输出内容,否则大幅拖慢速度
- 可每10万次简单反馈一次进度(仅调试用),正式运行建议关闭输出
计算并输出π的估算值
最终结果 = (圆内点数 ÷ 总点数) × 4。注意使用 float 类型参与运算,防止整数除法截断。
- 写成 $pi = ($inCircle / $total) * 4;,确保除法是浮点运算
- 可用 sprintf('%.6f', $pi) 控制小数位数便于观察收敛情况
- 可与 M_PI 常量对比误差:abs($pi - M_PI)
完整可运行示例(100万次试验)
以下为简洁、无依赖、直接可执行的PHP脚本:
<?php mt_srand(); // 初始化随机数生成器
$total = 1000000;
$inCircle = 0;
<p>for ($i = 0; $i 2 - 1;
$y = (mt_rand() / mt_getrandmax()) 2 - 1;
if ($x <em> $x + $y </em> $y <p>$pi = ($inCircle / $total) * 4;
echo "蒙特卡洛估算π({$total}次): " . sprintf('%.6f', $pi) . "\n";
echo "误差: " . sprintf('%.6f', abs($pi - M_PI)) . "\n";
?></p>php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











