How can pi be calculated to a set number of digits in PHP?

前端 未结 4 678
逝去的感伤
逝去的感伤 2021-01-05 11:18

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

4 decimal points

3.141

64 d

相关标签:
4条回答
  • 2021-01-05 11:44

    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

    0 讨论(0)
  • 2021-01-05 11:48

    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.

    0 讨论(0)
  • 2021-01-05 11:59

    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.

    0 讨论(0)
  • 2021-01-05 12:09

    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);
    
    0 讨论(0)
提交回复
热议问题