Php calculando PI

Por el 22 de enero de 2007

en: Programacion

Ahora que estamos en un nuevo servidor dedicado quería hacer unas pequeñas pruebas de rendimiento, para ello he utilizado el cálculo del número Pi que es uno de los sistemas más populares, para ello voy a comparar los datos de el actual servidor (Media Temple) con el antiguo (Servage).

Para ello el script tiene una variable llamada precisión la cual nos servirá para endurecer o suavizar la dificultad del cálculo del número Pi, aquí os dejo el código fuente del script con su correspondiente explicación.

function bcpi($precision=30){
$exactitud= ($precision+5)*45/32;
//Utilizar $precision a 180 tarda más o menos unos 30 segundos
bcscale($precision+5);
$n = 1;
$bcatan1 = 0;
$bcatan2 = 0;
while($n < $exactitud){
//Funciones
$bcatan1 = bcadd($bcatan1, bcmul(bcdiv(pow(-1, $n+1), $n * 2 - 1), bcpow(0.2, $n * 2 -1)));
$bcatan2 = bcadd($bcatan2, bcmul(bcdiv(pow(-1, $n+1), $n * 2 - 1), bcpow(bcdiv(1,239), $n * 2 -1)));
++$n;
}
return bcmul(4,bcsub(bcmul(4, $bcatan1),$bcatan2),5);
}

Esta no es la manera más eficaz de calcularlo pero si es la más fácil combinando la fórmula Machin y la serie de Taylor.

Te preguntarás porque no utilizar la función original pi(), pues muy simple porque su precisión es limitada.

La ejecución de este script es muy lenta y el tiempo necesitado para su cálculo aumenta a medida que subimos el valor de la variable precision.

Hay que aclarar que la variable exactitud no es lo mismo que la variable precision.

Servage

La ejecución con precision 1, tardó 0,00 segundos en su ejecucion
La ejecución con precision 11, tardó 0,02 segundos en su ejecucion
La ejecución con precision 21, tardó 0,10 segundos en su ejecucion
La ejecución con precision 31, tardó 0,38 segundos en su ejecucion
La ejecución con precision 41, tardó 3,24 segundos en su ejecucion
La ejecución con precision 51, tardó 2,05 segundos en su ejecucion
La ejecución con precision 61, tardó 2,72 segundos en su ejecucion
La ejecución con precision 71, tardó 5,99 segundos en su ejecucion
La ejecución con precision 81, tardó 11,59 segundos en su ejecucion
La ejecución con precision 91, tardó 24,40 segundos en su ejecucion
La ejecución con precision 101, tardó 28,88 segundos en su ejecucion

Media Temple

La ejecución con precision 1, tardó 0,00 segundos en su ejecucion
La ejecución con precision 11, tardó 0,01 segundos en su ejecucion
La ejecución con precision 21, tardó 0,06 segundos en su ejecucion
La ejecución con precision 31, tardó 0,20 segundos en su ejecucion
La ejecución con precision 41, tardó 0,72 segundos en su ejecucion
La ejecución con precision 51, tardó 1,45 segundos en su ejecucion
La ejecución con precision 61, tardó 2,84 segundos en su ejecucion
La ejecución con precision 71, tardó 5,23 segundos en su ejecucion
La ejecución con precision 81, tardó 10,25 segundos en su ejecucion
La ejecución con precision 91, tardó 15,12 segundos en su ejecucion
La ejecución con precision 101, tardó 24,28 segundos en su ejecucion

Conclusión

Cómo se puede apreciar hay una notable diferencia de velocidad de cálculo del script de un servidor a otro… lo cual me alegra bastante.

Si alguien esta interesado en hacer una prueba de rendimiento para su servidor aquí puede conseguir el código fuente.

Por cierto en el tiempo que he estado escribiendo este post he visto que Anieto ha escrito sobre el mismo script.

Fuente original del script: WebDevLogs

Enlaces Relacionados

Generar passwords accesibles con Php
Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script
PHP y MySql una estrecha relación
5 cosas que no sabías hacer con PHP
Generar documentos OpenOffice con PHP
Nueva versión de Notepad++
Hola Mundo!
Identificar las consultas más lentas de MySql
Crea sencillas gráficas con MySql
Programar un script PHP para saber quién está en línea
Consejos para optimizar PHP
Editando en Opera páginas web en tiempo real

Dejar un comentario