Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

php

math

pi

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

like image 832
d3vdpro Avatar asked Nov 24 '09 07:11

d3vdpro


People also ask

How are digits of pi calculated?

There are essentially 3 different methods to calculate pi to many decimals. One of the oldest is to use the power series expansion of atan(x) = x - x^3/3 + x^5/5 - ... together with formulas like pi = 16*atan(1/5) - 4*atan(1/239). This gives about 1.4 decimals per term.

How can I get pi in PHP?

The pi() function in PHP is used to return the value of π . Also, M_PI is a named constant PHP which gives identical value to that of returned by pi() function. It is slightly faster than the pi() function.

How do I count the number of digits in a number in PHP?

php //function to count number of digits function countDigits($MyNum){ $MyNum = (int)$MyNum; if($MyNum != 0) return 1 + countDigits($MyNum/10); else return 0; } $x = 564; $y = 980620; echo "$x contains: ". countDigits($x)." digits\n"; echo "$y contains: ".


1 Answers

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);
like image 138
Kus Avatar answered Oct 17 '22 01:10

Kus