首页 » 网站推广 » php中pi技巧_很有趣的投镖求PI法

php中pi技巧_很有趣的投镖求PI法

访客 2024-10-25 0

扫一扫用手机浏览

文章目录 [+]

被称为利用投飞镖的方法求PI

以下总结选自其他网友:

php中pi技巧_很有趣的投镖求PI法

Figure2是Figure1的右上角的部分。

php中pi技巧_很有趣的投镖求PI法
(图片来自网络侵删)

向Figure2中投掷飞镖多少次(一个很大的数目),并且每次都仍在不同的点上。

如果投掷的次数非常多,Figure2将被刺得“千疮百孔”。

这时,“投掷在圆里的次数”除以“总投掷次数”,再乘以4,便是PI的值!
(详细的推导过程拜会原文)

在这个算法中,很主要的一点是:如何做到“随机地向Figure2投掷”,便是说如何做到Figure2上的每个点被投中的概率相等。

有人总结了一下,这个实际上叫做蒙特卡洛算法,我们取一个单位的正方形(1 x 1) 里面做一个内切圆(单位圆),则 单位正方形面积 :内切单位圆面积 = 单位正方形内的飞镖数 : 内切单位圆内的飞镖数 ,通过打算飞镖个数就可以把单位圆面积算出来, 通过面积,在把圆周率打算出来。
把稳 ,精度和你投掷的飞镖次数成正比。

我的PHP源码实现:

PHP自带的mt_rand随机函数偏差较大,换成Halton sequence的方法,测试结果见后面

<?php$count = 0;// 忍受不了运算韶光,可以把$num 改小// $num 越大,越靠近真值$num = 100000;for ($i = 0; $i < $num; $i++) {

// list($x, $y) = array(mt_rand(0, 10000), mt_rand(0, 10000));

// $x /= 10000; $y /= 10000;

$x = halton($i, 3);

$y = halton($i, 7);

if (($x$x + $y$y) < 1) {

$count++;

}}$pi = 4.0 $count / $num;echo $pi.\"大众\n\"大众;// 参考Halton sequence// https://en.wikipedia.org/wiki/Halton_sequencefunction halton($index, $base) {

$result = 0;

$f = 1;

$i = $index;

while ($i > 0) {

$f /= $base;

$result += $f ($i % $base);

$i = floor($i / $base);

}

return $result;}

源码中halton传入参数是经由几次调度后的,更精确一些,测试PI = 3.14156

mt_rand偏差较大,3次结果如下:

mt_rand-1 => 3.142904

mt_rand-2 => 3.143196

mt_rand-3 => 3.139312

标签:

相关文章

女装SEO关键字,助力店铺流量提升

电子商务已成为我国经济发展的新引擎。女装行业作为电商领域的热门行业之一,竞争日益激烈。为了在众多竞争对手中脱颖而出,店铺进行SEO...

网站推广 2025-04-09 阅读0 评论0

娄底谷歌SEO加盟助力企业在线营销新篇章

越来越多的企业开始重视网络营销,而SEO(搜索引擎优化)作为网络营销的重要手段,已经成为企业提高网站排名、获取更多流量的关键。在我...

网站推广 2025-04-09 阅读0 评论0

SEO工作具体实操指南优化步骤与方法全

搜索引擎优化(SEO)已成为企业提升网站排名、获取高质量流量的重要手段。SEO工作具体怎么做?本文将为您详细解析SEO工作的具体实...

网站推广 2025-04-09 阅读0 评论0