¡Pi en Haskell!
El número pi siempre está presente en Matemáticas y Computación.
Aquí está el cálculo de algunos de sus dígitos utilizando la fórmula de Leibniz
pi/4=1-1/3+1/5-1/7+1/9....
Ver https://en.wikibooks.org/wiki/Calculus/Leibniz%27_formula_for_pi
pii n = let
ls=1:(map (+2) ls)
inter = 1:(-1):inter
in
4*(sum (zipWith (*) (take n inter) (map (\x -> 1/x) (take n ls))))
La fórmula de Leibniz es mona, pero por aquí encontré que con éste algoritmo
https://en.wikipedia.org/wiki/Chudnovsky_algorithm
se pueden hallar trillones de dígitos de pi. Ésta es la versión de este
algoritmo en Python....
import decimal def binary_split(a, b): if b == a + 1: Pab = -(6*a - 5)*(2*a - 1)*(6*a - 1) Qab = 10939058860032000 * a**3 Rab = Pab * (545140134*a + 13591409) else: m = (a + b) // 2 Pam, Qam, Ram = binary_split(a, m) Pmb, Qmb, Rmb = binary_split(m, b) Pab = Pam * Pmb Qab = Qam * Qmb Rab = Qmb * Ram + Pam * Rmb return Pab, Qab, Rab def chudnovsky(n): P1n, Q1n, R1n = binary_split(1, n) return (426880 * decimal.Decimal(10005).sqrt() * Q1n) / (13591409*Q1n + R1n) print(chudnovsky(2)) # 3.141592653589793238462643384
Reto: Traducir tal implementación a Haskell. Para quien se anime.
Comentarios
Publicar un comentario