Llevaba un tiempo queriendo calcular grandes cantidades de dígitos de Pi, pero siempre me encontraba con la misma limitación, no se puede trabajar en coma flotante. Así que decidí indagar por la red, y me encontré con un algoritmo que permite el cálculo de los dígitos de Pi por separado y de manera muy rápida. Este método se conoce como "Spigot Algorithm", y se basa a grosso modo en trabajar en una base distinta a la decimal.
Si queréis más información sobre el algorítmo y el código, con su ejecución y una salida, les dejo este enlace:
http://cypascal.blogspot.com.es/2013/03/calcular-pi.html
Yo he comprobado que los decimales son correctos hasta 10.000, pero supongo que se puede llegar a bastantes más. El tiempo de ejecución es muy pequeño, menor de un segundo.
Aquí también el código:
Código:
#include <stdio.h>
const int n=10000;
const int dim=((10*n)/3);
int i,j,k, resto, digant, nueves, aux;
int pi[dim+1];
int main (void)
{
for (i=1;i<=dim;i++) pi[i]=2;
nueves=0; digant=0;
for (i=1;i<=n;i++)
{
resto=0;
for (j=dim;j>=1;j--)
{
aux=10*pi[j]+resto*j;
pi[j]=aux % (2*j-1);
resto=aux/(2*j-1);
}
pi[1]=resto % 10;
resto=resto/10;
if (resto==9) nueves++;
else if (resto==10)
{
printf("%i",digant);
for (k=1;k<=nueves;k++) printf("0");
digant=0;
nueves=0;
}
else
{
printf("%i",digant);
digant=resto;
if (nueves!=0)
{
for(k=1;k<=nueves;k++) printf("9");
nueves=0;
}
}
}
printf("%i",digant);
scanf("%i");
}
Si conocen algoritmo que también consiga gran cantidad de dígitos, y que no sea demasiado complicado de implementar, díganmelo, que es un tema que siempre me ha interesado.
Salu10.