| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 26/02/2013 12:35 pm | | | Título: Cálculo de pi con algoritmo de Borwein en PYTHON |
| En una respuesta a untio referida al cálculo de pi propuse el método de Euler, pero con resultados "pobres" en cuanto a cantidad de cifras exactas. Así que buscando encontré un método iterativo llamado algoritmo de Borwein, que teóricamente cuadruplica las cifras obtenidas en cada iteración. Pero ni pa´dios me salen las cifras que indican. Y mi duda está si el lenguaje es el que hace impreciso el cálculo o la potencia del ordenador, que no creo ya que con el programa SUPER PI si me salen. ..... ¿alguien podría comprobar si sale lo que promete el algoritmo en su ordenador?
Paso el código, que como indico en el enunciado, aquí está en Python 3.x:
| Código: | #Borwein's algorithm (1985) '''and it has the impressive quartic rate of convergence(each successive iteration quadruples the number of correct digits). The first two iterates are Algorithm
yk+1=1-( 1-yk^4) ^1/41+(1-yk^4) ^1/4 ak+1=(1+yk+1)^4*ak-2^(2k+3)*yk+1*(1+yk+1+yk+1^2), starting with
y0 = sqrt2-1,a0 = 6-4sqrt2,
The first two iterates are Algorithm : 1/a1=3.1415926(462...) 1/a2=3.1415926535897932384626433832795028841971(146...)'''
from math import sqrt a=6-4*sqrt(2) y=sqrt(2)-1 for n in range (10): y1=(1-(1-y**4)**(1/4))/(1+(1-y**4)**(1/4)) a1=((1+y1)**4)*a-(2**(n+3))*y1*(1+y1+y1**2) a=a1 y=y1 a2=1/a1 print ("%1.50f" % a2) print () |
Podéis encontrarlo en:
http://en.wikipedia.org/wiki/Borwein%27s_algorithm http://numbers.computation.free.fr/Constants/Pi/iterativePi.html
Gracias por la atención y ¡ ¡ ¡ espero opiniones¡ ¡ ¡ .
Saluditos!. ...
P.D: Este no es el único intento, más bien el n-ésimo y todos con "pobres" resultados en cantidad de cifras exactas, insisto.
Por ejemplo, también he usado el método de fracciones continuas que aparentemente iría bien:

con el correpondiente código:
| Código: | i =100000 j=99998 pi=((6+(2*5-1)**2)**(-1))*(2*4-1)**2 print ("%1.50f" % pi) while (2*j-1) > 0: pi=(6+pi)**(-1)*((2*j-1)**2) j-=1 pi+=3 print ("%1.50f" % pi) print ()
|
Pero nada de nada, unas diez o quince cifras solamente.
Me pica la curiosidad, ¿ atí no?. ...
P.D .D: Seré torpe, el problema radica en la falta de precisión de los números en coma flotante: 0.1+0.1+0.1-0.3=5.551115123125783e-17
Tendría que usar números enteros y al final pasarlo a flotante. No obstante sigo abierto a sugerencias. 
Ultima edición por leosan el 27/02/2013 10:03 am; editado 1 vez |
| | Volver arriba | |  | leosan
Registrado: 19 Abr 2012 Mensajes: 730 Ubicación: GRAN CANARIA
| Publicado: 27/02/2013 9:58 am | | | Título: Re: Cálculo de pi con algoritmo de Borwein en PYTHON |
| O mejor aún, trabajar en binario, así creo que no perdería ninguna cifra.
No obstante sigo abierto a sugerencias. 
P.D: Estoy "espeso". No se ha editado en el anterior post. Sorry. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |