elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Calcular 10.000 decimales de pi
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Calcular 10.000 decimales de pi  (Leído 5,840 veces)
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
[C] Calcular 10.000 decimales de pi
« en: 30 Marzo 2013, 15:02 pm »

He visto que había un tema abierto sobre el cálculo de PI, pero no dejaba comentar, así que abro éste.
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.


En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
imoen


Desconectado Desconectado

Mensajes: 1.589



Ver Perfil
Re: [C] Calcular 10.000 decimales de pi
« Respuesta #1 en: 30 Marzo 2013, 16:09 pm »

Hola

si te gusta esto, prueba a calcular numeros primo de merseine :) o como se escriba

bs imoen


En línea

Medion Akoya p6624
i-3 370
8 gigas DDR 3 RAM //750 hd 5400
gforce gt425 optimus XDD
Esta es mi casa, mi pueblo , o lo que queda de el aun asi lucharemos ... POR BENALIA....!!

srta imoen
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [C] Calcular 10.000 decimales de pi
« Respuesta #2 en: 30 Marzo 2013, 18:06 pm »

Si puedes implementar este:
Algoritmo de Chudnovsky
El cual se usó para escribir este programa que no sé cuantos dígitos calcula pero muchos muchos usando la librería GMP:
http://gmplib.org/pi-with-gmp.html dale donde pone this program , porque es que no sé poner el enlace directo.
merseine :) o como se escriba
Mersenne  ;)
« Última modificación: 30 Marzo 2013, 18:19 pm por avesudra » En línea

Regístrate en
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: [C] Calcular 10.000 decimales de pi
« Respuesta #3 en: 30 Marzo 2013, 22:08 pm »

Conocía ese algoritmo, (que es el que se usa en la actualidad) pero me topaba otra vez con el problema de la precisión. Con la biblioteca gmp efectivamente se evita, y se puede calcular con ese algoritmo, y probablemente obtengas una burrada (pero burrada burrada ¿10^20 dígitos?) de dígitos. El problema que tengo es que no consigo ejecutar la librería gmp

Salu10.
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [C] Calcular 10.000 decimales de pi
« Respuesta #4 en: 30 Marzo 2013, 22:17 pm »

El problema que tengo es que no consigo ejecutar la librería gmp

Salu10.
¿Ejecutarla? Será compilarla y enlazarla ¿no? Para eso escribí hace poco un tutorial:

http://underc0de.org/foro/c-c/%28tutorial%29como-compilar-gmp-5-1-0%28the-gnu-multiple-precision-arithmetic-library%29/

Aquí tienes un tuto mío más antiguo y menos gráfico aunque explica como configurarla en codeblocks:

http://www.mediafire.com/?v7b076oohh0cav8
« Última modificación: 30 Marzo 2013, 22:20 pm por avesudra » En línea

Regístrate en
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: [C] Calcular 10.000 decimales de pi
« Respuesta #5 en: 30 Marzo 2013, 22:39 pm »

Muchas gracias por los enlaces, probare mañana que tendré tiempo y ya te contaré a ver que tal, a ver si esta vez lo consigo, porque ya he estado mirando, en este enlace:

http://suchideas.com/journal/2007/07/installing-gmp-on-windows/

y me fallaba el paso 4.IV donde dice que hay que ejecutar un .exe de los ficheros que te descargas de la biblioteca.

Probaré con los tuyos, muchas gracias!!

Salu10.
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con decimales
Programación Visual Basic
dekland 5 1,847 Último mensaje 3 Marzo 2006, 19:20 pm
por dekland
decimales en VB
Programación Visual Basic
kakinets 1 1,193 Último mensaje 2 Junio 2007, 01:36 am
por <?BRoWLi?>
Ayuda con uso de decimales
.NET (C#, VB.NET, ASP)
eliezeralpr 4 3,658 Último mensaje 27 Abril 2009, 23:02 pm
por AntonioMeucci
Calcular decimales de Pi en PHP
PHP
CICOLO_111234 0 1,452 Último mensaje 9 Agosto 2010, 18:41 pm
por CICOLO_111234
Calcular decimales de Pi en PHP
PHP
CICOLO_111234 0 3,198 Último mensaje 9 Agosto 2010, 19:18 pm
por CICOLO_111234
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines