(No te alarmes por el título; esta es una pregunta sobre matemáticas, no sobre programación).
En la documentación del decimal
de la Biblioteca Estándar de Python, un ejemplo se da para calcular los dígitos de $\pi$ con una precisión determinada:
def pi():
"""Compute Pi to the current precision.
>>> print(pi())
3.141592653589793238462643383
"""
getcontext().prec += 2 # extra digits for intermediate steps
three = Decimal(3) # substitute "three=3.0" for regular floats
lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
while s != lasts:
lasts = s
n, na = n+na, na+8
d, da = d+da, da+32
t = (t * n) / d
s += t
getcontext().prec -= 2
return +s # unary plus applies the new precision
No he podido encontrar ninguna referencia sobre qué fórmula o hecho sobre $\pi$ este cómputo utiliza, de ahí esta pregunta.
Traduciendo el código a una notación matemática más típica, y utilizando algunos cálculos y observaciones, esto equivale a una fórmula para $\pi$ que comienza como:
$$\begin{align}\pi &= 3+\frac{1}{8}+\frac{9}{640}+\frac{15}{7168}+\frac{35}{98304}+\frac{189}{2883584}+\frac{693}{54525952}+\frac{429}{167772160} + \dots\\ &= 3\left(1+\frac{1}{24}+\frac{1}{24}\frac{9}{80}+\frac{1}{24}\frac{9}{80}\frac{25}{168}+\frac{1}{24}\frac{9}{80}\frac{25}{168}\frac{49}{288}+\frac{1}{24}\frac{9}{80}\frac{25}{168}\frac{49}{288}\frac{81}{440}+\frac{1}{24}\frac{9}{80}\frac{25}{168}\frac{49}{288}\frac{81}{440}\frac{121}{624}+\frac{1}{24}\frac{9}{80}\frac{25}{168}\frac{49}{288}\frac{81}{440}\frac{121}{624}\frac{169}{840}+\dots\right) \end{align}$$
o, de forma más compacta,
$$\pi = 3\left(1 + \sum_{n=1}^{\infty}\prod_{k=1}^{n}\frac{(2k-1)^2}{8k(2k+1)}\right)$$
¿Es ésta una fórmula conocida para $\pi$ ? ¿Cómo se demuestra? ¿Cómo se compara con otros métodos, en términos de rapidez de convergencia, problemas de estabilidad numérica, etc.? De un vistazo no lo he visto en la página de Wikipedia para Lista de fórmulas que implican o en la página de MathWorld para Fórmulas Pi .
2 votos
Relacionado: cometer que lo añadió en 2004 (¿antes de la 2.4?), antigua discusión de alrededor de 2009: lists.gt.net/python/python/792780?do=post_view_threaded
4 votos
Así que Raymond Hettinger lo sacó de "La alegría de Pi": Mira el Tweet de @raymondh: twitter.com/raymondh/status/1071215064894529536?s=09