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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Calculo de pi en alta precisión (aporte)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Calculo de pi en alta precisión (aporte)  (Leído 14,862 veces)
scott_


Desconectado Desconectado

Mensajes: 458


Mientras luches, ya eres un ganador


Ver Perfil
Re: Calculo de pi en alta precisión (aporte)
« Respuesta #20 en: 14 Agosto 2014, 02:33 am »

do-while: lo que es la arrogancia! XD al final si era el factorial el error! XD (eso creo)
XD pero ahorita está más feo aún pero funciona! y es increiblemente eficiente!

de ahora en adelante publicaré el codigo en el post inicial...  no lo publicaré como un gran bloque sino, cada sección... olvidense de imprimir en archivo y de la modularidad! XD eso aún lo postergo

Gh057: lo había visto! XD pero me tomará otro dia adaptarlo, aunque como tiene similaridad con Ramanujan no se me debría ser tan difícil...


alguna vez vi algo de comentario de código cómicos... este merece uno que vi

Código
  1. //cuando empeze a hacer esto solo dios y yo sabiamos lo que hacia, en este momento solo dios lo sabe

aqui la correccion de Ramanujan

Código
  1. string metodo_ramanujan(unsigned long int digitos, long &exponente) {
  2.    digitos/=8;
  3.    digitos*=1.01;
  4.    unsigned long int i, j;
  5.    mpf_t sumatoria, buff_sumatoria, buff_ciclo_superior, buff_ciclo_inferior, primera_parte,
  6.            buff_ciclo_inferior2, factorial_superior, factorial_inferior;
  7.    mpf_init_set_ui(sumatoria, 1103); //sumatoria=0
  8.    mpf_init_set_ui(buff_sumatoria, 0); //buff_sumatoria=0
  9.    mpf_init_set_ui(buff_ciclo_superior, 0); //buff_ciclo_superior=0
  10.    mpf_init_set_ui(buff_ciclo_inferior, 0); //buff_ciclo_inferior=0
  11.    mpf_init_set_ui(primera_parte, 0); //primera_parte=0
  12.    mpf_init_set_ui(buff_ciclo_inferior2, 0); //buff_ciclo_inferior2=0
  13.    mpf_init_set_ui(factorial_superior, 1); //factorial_superior=1
  14.    mpf_init_set_ui(factorial_inferior, 1); //factorial_inferior=1
  15.    mpf_sqrt_ui(primera_parte, 2); //primera_parte=sqrt(2)
  16.    mpf_mul_ui(primera_parte, primera_parte, 2); //primera_parte*=2
  17.    mpf_div_ui(primera_parte, primera_parte, 9801); //primera_parte/=9801
  18.  
  19.    for (i = 1; i <= digitos; i++) {
  20.        for (j = (i - 1)*4 + 1; j <= i * 4; j++) {
  21.            mpf_mul_ui(factorial_superior, factorial_superior, j);
  22.        }
  23.        mpf_set_ui(buff_ciclo_superior, 26390);
  24.        mpf_mul_ui(buff_ciclo_superior, buff_ciclo_superior, i);
  25.        mpf_add_ui(buff_ciclo_superior, buff_ciclo_superior, 1103);
  26.        mpf_mul(buff_ciclo_superior, buff_ciclo_superior, factorial_superior);
  27.        mpf_mul_ui(factorial_inferior, factorial_inferior, i);
  28.        mpf_pow_ui(buff_ciclo_inferior, factorial_inferior, 4);
  29.        mpf_set_ui(buff_ciclo_inferior2, 396);
  30.        mpf_pow_ui(buff_ciclo_inferior2, buff_ciclo_inferior2, 4 * i);
  31.        mpf_mul(buff_ciclo_inferior, buff_ciclo_inferior, buff_ciclo_inferior2);
  32.        mpf_div(buff_sumatoria, buff_ciclo_superior, buff_ciclo_inferior);
  33.        mpf_add(sumatoria, sumatoria, buff_sumatoria);
  34.  
  35.    }
  36.    mpf_mul(sumatoria, sumatoria, primera_parte);
  37.    mpf_ui_div(sumatoria, 1, sumatoria);
  38.    return mpf_get_str(NULL, &exponente, 10, 0, sumatoria);
  39. }

si no fuera tan flojo (y estuviera claro en el tema), intentara hacer operator overload para usar los operadores normales! D:

a partir de ahora modifico el post principal

Disculpa por revivir el post. Muy buen post, en definitiva Pi tiene muchos decimales, que en calculos escolares me basta con 3.1416 xD, Pero jamás entendí la ecuacuón de Ramanujan.
Me volví loco y opté por enender otras, ¿me la puedes explicar con peras y manzanas?  :P

Un Cordial Saludo  ;D


En línea

Si no intentas salvar una vida, jamás salvarás la de nadie más
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calculo de pi en alta precisión (aporte)
« Respuesta #21 en: 14 Agosto 2014, 02:48 am »

Disculpa por revivir el post. Muy buen post, en definitiva Pi tiene muchos decimales, que en calculos escolares me basta con 3.1416 xD, Pero jamás entendí la ecuacuón de Ramanujan.
Me volví loco y opté por enender otras, ¿me la puedes explicar con peras y manzanas?  :P

Un Cordial Saludo  ;D


que cosa no entendiste? las operaciones en el código?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
scott_


Desconectado Desconectado

Mensajes: 458


Mientras luches, ya eres un ganador


Ver Perfil
Re: Calculo de pi en alta precisión (aporte)
« Respuesta #22 en: 14 Agosto 2014, 02:50 am »


que cosa no entendiste? las operaciones en el código?

Si  :huh:
En línea

Si no intentas salvar una vida, jamás salvarás la de nadie más
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calculo de pi en alta precisión (aporte)
« Respuesta #23 en: 14 Agosto 2014, 03:13 am »

lo voy a traducir a codigo en lenguaje "normal"(c++) para que sea más visible

recordaré la formula por cosas paracticas


Código
  1. unsigned long int i, j;
  2.  
  3. float sumatoria, buff_sumatoria, buff_ciclo_superior, buff_ciclo_inferior, primera_parte, buff_ciclo_inferior2, factorial_superior, factorial_inferior;
  4.  
  5. sumatoria=1103;
  6. buff_sumatoria=0;
  7. buff_ciclo_superior=0;
  8. buff_ciclo_inferior=0;
  9. primera_parte=0;
  10. buff_ciclo_inferior2=0;
  11. factorial_superior=1;
  12. factorial_inferior=1;
  13.  
  14. //sqrt(2)
  15. primera_parte=sqrt(2);
  16.  
  17. //sqrt(2) * 2
  18. primera_parte*=2;
  19.  
  20. //sqrt(2)*2 / 9801
  21. primera_parte/=9801
  22.  
  23. for (i = 1; i <= digitos; i++) {//sabiendo que ramanujan produce 8 digitos con un margen de error de 1% por ciclo, según mis pruebas
  24.        for (j = (i - 1)*4 + 1; j <= i * 4; j++) {
  25.            factorial_superior*=*j;//ciclo acumulador del factorial (4k)!
  26.        }
  27.        //29690 * k
  28.        buff_ciclo_superior= 26390;
  29.        buff_ciclo_superior *= i;
  30.  
  31.        //(1103 + 29690*k)
  32.        buff_ciclo_superior+=1103;
  33.  
  34.        //(4k)! * (1103+29690*k)
  35.        buff_ciclo_superior*=factorial_superior;
  36.  
  37.        //(k!)^4
  38.        factorial_inferior*=i;
  39.        buff_ciclo_inferior = pow(factorial_inferior, 4);
  40.  
  41.        //396^4k
  42.        buff_ciclo_inferior2 = 396;
  43.        buff_ciclo_inferior2 = pow(buff_ciclo_inferior2, 4 * i);
  44.  
  45.        //(k!)^4 * 396^4
  46.        buff_ciclo_inferior*=buff_ciclo_inferior2;
  47.  
  48.        // (4k)!*(1103+29690*k) / (k!)^4*396^4
  49.        buff_sumatoria = buff_ciclo_superior / buff_ciclo_inferior;
  50.  
  51.        sumatoria+=buff_sumatoria;//la sumatoria...
  52.  
  53.    }
  54.  
  55.    //sqrt(2)*2/9801 * SUMATORIA (4k)!*(1103+29690*k) / (k!)^4*396^4
  56.    sumatoria*=primera_parte;
  57.  
  58.    // el resultado original es 1/pi, entonces con esto hago la inversión
  59.    sumatoria = 1 / sumatoria;
  60.  
  61.    //convierte a texto para poder imprimirlo
  62.    return mpf_get_str(NULL, &exponente, 10, 0, sumatoria);
  63.  
  64.  
  65.  

espero que así sea más visible
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
scott_


Desconectado Desconectado

Mensajes: 458


Mientras luches, ya eres un ganador


Ver Perfil
Re: Calculo de pi en alta precisión (aporte)
« Respuesta #24 en: 14 Agosto 2014, 03:14 am »

Mejor  ;D ;D ;D

Que lenguaje C++ si se una gran parte de él  ;-)

Gracias y un Cordial Saludo  ;D
En línea

Si no intentas salvar una vida, jamás salvarás la de nadie más
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Calculo de pi en alta precisión (aporte)
« Respuesta #25 en: 14 Agosto 2014, 03:20 am »

Mejor  ;D ;D ;D

Que lenguaje C++ si se una gran parte de él  ;-)

Gracias y un Cordial Saludo  ;D

es que siempre fue en c++ solo que para poder manejar grandes cifras (al final manejaba 10 millones de digitos (en menos de 5 minutos creo...) descargate la librería y prueba el código e intenta a ver si puedes hacer el que no pude, el de Chudnovsky que lo intenté y se me hizo muy complicado (luego estuve muy saturado de trabajo en la oficina para pensar en esto XD)

En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Bitrate + Motion Search Precision
Multimedia
G3N3S1S 2 2,535 Último mensaje 13 Enero 2005, 23:23 pm
por fanny
pequeño aporte(proxy),pero aporte al fin.:D
Programación Visual Basic
Tengu 0 2,575 Último mensaje 22 Julio 2007, 17:33 pm
por Tengu
Obtener más precisión que long double en C?¿?
Programación C/C++
jhonsc 3 3,544 Último mensaje 4 Febrero 2012, 13:48 pm
por Xandrete
Problema con la precisión del double
Java
danielo- 4 5,433 Último mensaje 27 Marzo 2012, 21:07 pm
por danielo-
Prueban en Atapuerca una tecnología inalámbrica de alta precisión pionera en...
Noticias
wolfbcn 0 1,323 Último mensaje 27 Junio 2012, 21:21 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines