使用PHP计算圆周率

4

好的,这只是我和我的同事在玩耍的东西。我们知道PHP有自己的PI函数,但这是出于理论和好奇心而产生的。

所以我们想知道PHP是否能够计算pi,以及如何计算。
pi的公式为π= 4/1 - 4/3 + 4/5 - 4/7 + 4/9...

以下是我们做的:

$theValue = 100;// the max
   for ($i=1; $i<$theValue; $i++){
   if ($i % 2 == 1){
       $iWaardes[] =  4 / $i; // divide 4 by all uneven numbers and store them in an array
    }
}
// Use the array's $keys as incrementing numbers to calculate the $values.
for ($a=0, $b=1, $c=2; $a<$theValue; $a+=3, $b+=3, $c+=3 ){
    echo ($iWaardes[$a] - $iWaardes[$b] + $iWaardes[$c]).'<br>';
}

现在我们有一个循环计算了第一组4/1 - 4/3 + 4/5,但它停在那里,然后重新开始以下的3个序列。如何使其运行整个$theValue并计算整个序列?

请记住,这只是一个有趣的实验,不要当真。

3个回答

4

您在想得太多了。只需要使用取模运算来决定是加还是减,并进行就地操作即可。

$theValue = 100;// the max
$pi = 0;
for ($i=1; $i<$theValue; $i++){
    if ($i % 2 == 1){
        $pi += 4.0 / ($i * 2 - 1);
    } else {
        $pi -= 4.0 / ($i * 2 - 1);
    }
}

关于您的编辑,我第一次没有理解,抱歉。下次最好通过评论回答来更好地为您服务 :) - Federico klez Culloca
老兄,我刚刚花了10分钟看着一个9行的脚本,还是找不到错误 :-) - Interactive
导出显示“3.15169340607”。在我的世界中,“pi”是“3.14159265359”。你能看出问题在哪里吗? - Interactive
哇,我刚刚发现当你增加$theValue时,整个输出都会改变。 - Interactive
3
@Interactive 这就是关键所在。这个数列越往后推,它的总和趋近于圆周率 pi - ishegg

2

只使用一个循环。有一个名为$bottom的变量,在每次迭代中加2,除以它,根据模数加/减它:

$theValue = 10000; // the max
$bottom = 1;
$pi = 0;
for ($i = 1; $i < $theValue; $i++) {
    if ($i % 2 == 1) {
        $pi += 4 / $bottom;
    } else {
        $pi -= 4 / $bottom;
    }
    $bottom += 2;
}
var_dump($pi); // 3.14169266359

演示

除了没有按适当的数字进行除法之外,您的代码有什么问题是第二个循环。出于某种原因,您正在以3个为3个的方式打印存储的数字。在这种情况下,直到$a增加3时,它比$theValue低得多。因此,例如,如果$theValue为10,则您只需要2个循环即可开始出现越界错误。


在你的代码中,我该如何扩展pi的长度?例如:3.14169266359xxxxxxxxxxxxxxx - Interactive
@交互式阅读 这里 - ishegg

0

pi()函数返回π的近似值。返回的浮点数精度基于php.ini中的精度指令,默认为14。此外,您还可以使用M_PI常量,它产生与pi()相同的结果。

source

使用PHP,我们也可以计算Pi,尽管速度非常慢。

$pi = 4; $top = 4; $bot = 3; $minus = TRUE;
$accuracy = 1000000;

for($i = 0; $i < $accuracy; $i++)
{
  $pi += ( $minus ? -($top/$bot) : ($top/$bot) );
  $minus = ( $minus ? FALSE : TRUE);
  $bot += 2;
}
print "Pi ~=: " . $pi;

这种计算圆周率的方法虽然很慢,但代码易读。您可以在此处详细了解该方法: http://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80

如果增加$accuracy变量,则可以更准确地计算Pi。根据您的服务器速度快慢,您可以相对较快地计算前6位数字。

然而,计算每个后续数字所需时间呈指数增长。使用此方法计算20位数字的Pi可能需要数年时间。


1
你需要给出归属。来源 - ishegg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接