Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: CICOLO_111234 en 9 Agosto 2010, 18:41 pm



Título: Calcular decimales de Pi en PHP
Publicado por: CICOLO_111234 en 9 Agosto 2010, 18:41 pm
Hola:

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


Código
  1. <?
  2. ini_set("max_execution_time", "0");
  3. $decimales = '10000';
  4. $n = "0";
  5. $sumatoria = "0";
  6.  
  7. function factorial ($num) {
  8.  
  9. // inicializamos la variable
  10. $factorial = 1;
  11. // calculamos el  factorial
  12. // multiplicando el numero por todos
  13. // los numeros entre el y 1
  14. // Salida: "El factorial de 5 es 120"
  15. for ($x=$num; $x>=1; $x--) {
  16.  $factorial = bcmul($factorial, $x);
  17. }
  18.  
  19. return $factorial;
  20.  
  21. }
  22.  
  23.  
  24.  
  25.  
  26. While ($n < $_GET['n']) {
  27.  
  28. $raiz =  bcsqrt('2', $decimales);
  29. $mult1 = bcmul('2', $raiz, $decimales);
  30. $primera = bcdiv($mult1, '9801', $decimales);
  31. $mult2 = bcmul(factorial(4*$n), bcadd('1103', bcmul('26390', $n, $decimales), $decimales), $decimales);
  32. $mult22 = bcmul(factorial($n), factorial($n), $decimales);
  33. $mult22 = bcmul($mult22, $mult22, $decimales);
  34.  
  35. $exponente = 4*$n;
  36. $numero = 396;
  37.    $numeroo = 1;
  38.    for ($i=0; $i<$exponente; $i++)
  39.    {
  40.        $numeroo = bcmul($numeroo, $numero, $decimales);
  41.    }
  42.  
  43.  
  44. $mult3 = bcmul($mult22, $numeroo, $decimales);
  45. $div = bcdiv($mult2, $mult3, $decimales);
  46. $sumatoria = bcadd($sumatoria, $div, $decimales);
  47.  
  48. #$sumatoria = $sumatoria + ((factorial(4*$n))*(1103+26390*$n))/(potencia (factorial($n), 4)*potencia (396, 4*$n));
  49. $sum2 = bcmul($sumatoria, $primera, $decimales);
  50. $sum3 = bcdiv('1', $sum2, $decimales);
  51. $fp = fopen('pi.txt', "w");
  52. $write = fputs($fp, $sum3);
  53. fclose($fp);
  54.  
  55.  
  56. $n=$n+1;
  57.  
  58. if ($n % 20 == 0)
  59. {
  60.  
  61. sleep (1);
  62. }
  63. }
  64. echo $sum3;
  65.  
  66.  
  67. ?>


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.