Calcular decimales de Pi en PHP

Iniciado por CICOLO_111234, 9 Agosto 2010, 18:41 PM

0 Miembros y 1 Visitante están viendo este tema.

CICOLO_111234

Hola:

Aquí os pongo un programa que he creado para calcular los decimales de PI. Utiliza el método de Ramanujan.



Código (php) [Seleccionar]

<?
ini_set("max_execution_time", "0");
$decimales = '10000';
$n = "0";
$sumatoria = "0";

function factorial ($num) {

// inicializamos la variable
$factorial = 1;
// calculamos el  factorial
// multiplicando el numero por todos
// los numeros entre el y 1
// Salida: "El factorial de 5 es 120"
for ($x=$num; $x>=1; $x--) {
  $factorial = bcmul($factorial, $x);
}

return $factorial;

}




While ($n < $_GET['n']) {

$raiz =  bcsqrt('2', $decimales);
$mult1 = bcmul('2', $raiz, $decimales);
$primera = bcdiv($mult1, '9801', $decimales);
$mult2 = bcmul(factorial(4*$n), bcadd('1103', bcmul('26390', $n, $decimales), $decimales), $decimales);
$mult22 = bcmul(factorial($n), factorial($n), $decimales);
$mult22 = bcmul($mult22, $mult22, $decimales);

$exponente = 4*$n;
$numero = 396;
    $numeroo = 1;
    for ($i=0; $i<$exponente; $i++)
    {
        $numeroo = bcmul($numeroo, $numero, $decimales);
    }


$mult3 = bcmul($mult22, $numeroo, $decimales);
$div = bcdiv($mult2, $mult3, $decimales);
$sumatoria = bcadd($sumatoria, $div, $decimales);

#$sumatoria = $sumatoria + ((factorial(4*$n))*(1103+26390*$n))/(potencia (factorial($n), 4)*potencia (396, 4*$n));
$sum2 = bcmul($sumatoria, $primera, $decimales);
$sum3 = bcdiv('1', $sum2, $decimales);
$fp = fopen('pi.txt', "w");
$write = fputs($fp, $sum3);
fclose($fp);


$n=$n+1;

if ($n % 20 == 0)
{

sleep (1);
}
}
echo $sum3;


?>




Sólo hay que subirlo y entrar en www.tupagina.com/pagina.php?n=XXXX. Cuanto mayor sea XXXX más decimales correctos tendrá. En la línea 3 puedes cambiar la cantidad de decimales que quieres que muestre (pero cuanto mayor sea, más tarda en hacer las operaciones).

Lo hice ayer, lo probé y he conseguido 8.000 decimales correctos de Pi. Ahora mismo lo tengo trabajando para que obtenga más decimales.