How can pi be calculated to a set number of digits

2019-02-14 06:02发布

How can I calculate the value of pi in PHP up to X decimal numbers.

4 decimal points

3.141

64 decimal points

3.141592653589793238462643383279502884197169399375105820974944592

标签: php math pi
4条回答
Rolldiameter
2楼-- · 2019-02-14 06:15

You can calculate Pi by the Chudnosky series. If you have a server with a very high ram you can easily calculate Pi to many decimal places. If you want to get it to some specific decimal place then, increase the efforts to a really large number and use substr to shorten it to your required decimal place. If you think this process is very slow, then you can get pi value by searching it on google.

查看更多
We Are One
3楼-- · 2019-02-14 06:22

Calculating PI in php?

Why calculate when we already have the M_PI constant?

M_PI contains the value 3.14159265358979323846.

10000 decimal places for PI is quite a number.

See: http://www.php.net/manual/en/math.constants.php

查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-02-14 06:39

Found the source for the broken link @Konamiman posted.

Compared the results to: http://www.angio.net/pi/digits/50.txt and they are the same.

// 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);
查看更多
Luminary・发光体
5楼-- · 2019-02-14 06:39

PHP cannot hold a number that long as far as I know, but 22/7 is an ancient way to calculate PI, though that will not be any better than the PI constant included in PHP. Perhaps you are trying to output a long string of PI as an exercise.

查看更多
登录 后发表回答