La mayoría de ellas consistían en sumas de series de potencias o sucesiones recursivas, pero, mirando entre los comentarios, me topé con una que me llamó la atención. Decía algo así:
Tomando un cuadrado de lado l = 2 unidades, cuya área será l*l = 4 unidades^2 y una circunferencia inscrita en él (por tanto de radio r = 1 unidad) de área, por tanto, pi*r^2 = pi*1 = pi. Si fabricásemos una diana bajo estas condiciones y nos liásemos a tirar dardos de forma aleatoria, la probabilidad de que cayeran dentro del círculo sería PI/4 (por la relación entre las áreas).
Por tanto, tenemos que la relación entre dardos dentro del círculo, y dardos lanzados, tendería a PI/4, de donde podemos despejar PI de la forma:
PI -> (dardos_en_el_circulo / dardos_lanzados) * 4
Por tanto, se puede decir que, para muchos dardos lanzados, esa relación tendería a PI.
Por tanto, tenemos que la relación entre dardos dentro del círculo, y dardos lanzados, tendería a PI/4, de donde podemos despejar PI de la forma:
PI -> (dardos_en_el_circulo / dardos_lanzados) * 4
Por tanto, se puede decir que, para muchos dardos lanzados, esa relación tendería a PI.
Pues bien, como no tengo ni diana, ni miles de dardos, ni ganas de tirarme meses lanzando y apuntando resultados (aparte de que no sería aleatorio), hice un pequeño script de simulación del que dejo unas capturas para diferentes valores de dardos_lanzados ("n" en las capturas). El color verde identifica los dardos que cayeron dentro de la diana, y los rojos los que cayeron fuera:






Como vemos, la relación calculada cada vez se parece más al número PI conocido por todos.
También dejo por aquí la función para calcular el valor de PI aproximado para "$shots" tiradas de dardos:
//Función que devuelve un float aleatorio entre "min" y "max"
//Sacada de php.net
function random_float ($min,$max) {
return ($min+lcg_value()*(abs($max-$min)));
}
//Función que aproxima el valor de PI por el método antes mencionado.
//Toma como parámetro el número de lanzamientos
function aproxima_pi($shots) {
$in = 0;
for ($i = 1; $i <= $shots; $i++) {
$x = random_float(-1, 1);
$y = random_float(-1, 1);
if (($x*$x + $y*$y) <= 1) {
$in++;
}
}
return (($in/$shots) * 4);
}
Pues esto es todo, sé que es una frikada, pero... ¿No es tremendamente ingenioso y curioso? Será que yo soy raro, pero a mí me lo pareció :P
¿A alguien se le ocurre otra manera de aproximar a nuestro amigo PI?

