在 PHP 中如何计算 pi 的数值到指定的位数?

6

如何在PHP中计算出π的值,且精确到X位小数。

保留4位小数

3.141

保留64位小数

3.141592653589793238462643383279502884197169399375105820974944592


主要问题是计算出π的值,精确到100000位小数... - d3vdpro
有点挑剔,但是3不在小数位上(小数点后的数字位),因此这些数字分别只有3和63个小数位。 - ajp15243
4个回答

4

我找到了Konamiman发布的损坏链接的来源。

将结果与http://www.angio.net/pi/digits/50.txt进行比较,它们是相同的。

// Source: http://mgccl.com/2007/01/22/php-calculate-pi-revisited
function bcfact($n)
{
    return ($n == 0 || $n== 1) ? 1 : bcmul($n,bcfact($n-1));
}
function bcpi($precision)
{
    $num = 0;$k = 0;
    bcscale($precision+3);
    $limit = ($precision+3)/14;
    while($k < $limit)
    {
        $num = bcadd($num, bcdiv(bcmul(bcadd('13591409',bcmul('545140134', $k)),bcmul(bcpow(-1, $k), bcfact(6*$k))),bcmul(bcmul(bcpow('640320',3*$k+1),bcsqrt('640320')), bcmul(bcfact(3*$k), bcpow(bcfact($k),3)))));
        ++$k;
    }
    return bcdiv(1,(bcmul(12,($num))),$precision);
}

echo bcpi(1000);

0

3
显然,您可以在php.ini中设置 pi()/M_PI 的精度。不确定是否能够设置到11^H 100K。 :) http://php.net/manual/en/function.pi.php - deceze
1
很遗憾,看起来它只能到48,在我的系统上至少是这样。 :) - deceze

0
你可以用 Chudnosky 级数计算 π。如果你有一台内存非常高的服务器,你可以轻松地计算出许多小数位的 π 值。如果你想要计算到某个特定的小数位,那么就将努力程度增加到一个非常大的数字,并使用 substr 将它缩短到你需要的小数位数。如果你认为这个过程很慢,那么你可以在谷歌上搜索得到 π 的值。

这是一种非常慢的方法,因为该级数收敛得很慢。 - Salix alba
1
@Salixalba,你看到了吗?我写了“...一个内存非常高的服务器...”。 - Anay Karnik
从http://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80计算π到10个正确的小数位需要直接求和系列约5000000000个术语。将更多的内存投入问题中并不能帮助解决问题,最好尝试使用http://en.wikipedia.org/wiki/Approximations_of_%CF%80中的其他公式。 - Salix alba

-4

据我所知,PHP无法保存那么长的数字,但22/7是一种古老的计算圆周率的方法,尽管这并不比PHP中包含的圆周率常数更好。也许你正在尝试输出一个很长的圆周率字符串作为练习。


3
22/7这个值并不十分准确;与之相比,原生的PHP常量至少能够在给定系统上达到最高的精度。 - Dan Lugg

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