2009-11-24 44 views
5

我怎样才能计算在PHP的pi值到X十进制数。pi如何计算到PHP中的一组数字?

4小数点

3.141

64个小数点

3.141592653589793238462643383279502884197169399375105820974944592

+0

主要问题是pi计算值高达100000十进制数字... – d3vdpro 2009-11-24 08:10:00

+0

Nit挑剔,但'3'不在小数点位置(小数点后的数字位置,'.'),所以这些数字只有3位和63位十进制数字。 – ajp15243 2014-09-07 02:37:21

回答

0

在php中计算PI?

为什么计算当我们已经有M_PI常量?

M_PI包含值3.14159265358979323846

PI的10000小数位数不胜枚举。

参见:http://www.php.net/manual/en/math.constants.php

+3

显然你可以在php.ini中设置'pi()'/'M_PI'的精度。不知道它是否会达到11^H 100K。 :) http://php.net/manual/en/function.pi.php – deceze 2009-11-24 09:21:06

+1

太糟糕了,显然它只能达到48,至少在我的系统上。 :) – deceze 2009-11-24 09:34:33

+0

感谢欺骗工作! – mauris 2009-11-24 10:05:00

-4

PHP不能容纳一个数字,只要据我所知,但22/7是一种古老的方法来计算PI,尽管这会不会比包含在PHP中的PI常数更好。也许你试图输出一串长长的PI作为练习。

+3

22/7很难准确;本地PHP常量至少精确到给定系统上的可能精度。 – Dan 2013-12-18 05:24:28

3

发现破碎的链接的来源@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

你可以通过Chudnosky系列计算Pi。如果你有一个非常高的内存的服务器,你可以很容易地计算Pi到许多小数位。如果你想把它带到某个特定的小数位,那么请增加一个非常大的数字,并使用substr将它缩短到所需的小数位。如果你认为这个过程非常缓慢,那么你可以通过在谷歌搜索获得pi值。

+0

这是一个非常缓慢的方式来做到这一点,因为该系列收敛缓慢。 – 2014-08-18 10:14:52

+1

@Salixalba你能看到,我写过那里'...一个非常高的内存服务器...'。 – 2014-08-18 10:19:06

+0

从http://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80使用该系列的直接求和计算π到10个正确的小数位数需要大约5,000,000,000个项。对这个问题投入更多的内疚并不会更好地尝试一种不同的公式,例如http://en.wikipedia.org/wiki/Approximations_of_%CF%80 – 2014-08-18 10:35:41