La fórmula de Bailey-Borwein-Plouffe (o fórmula BBP) permite calcular el enésimo dígito de π en base 2 (o 16) sin necesidad de hallar los precedentes, de una manera rápida y utilizando muy poco espacio de memoria en la computadora. Simon Plouffe junto con David Bailey y Peter Borwein hallaron esta fórmula el 19 de septiembre de 1995 usando un programa informático llamado PSLQ que busca relaciones entre números enteros.[1]
La fórmula BBP
La demostración de esta fórmula se encuentra más abajo.
Uso de la fórmula para calcular los decimales del número π
A continuación se muestra el cálculo del enésimo dígito hexadecimal de π.
Primero se debe observar que el dígito ubicado en la posición N+1 de π en base 16 es el mismo que el primer dígito hexadecimal de 16Nπ. En efecto, como en la base 10, multiplicar un número en base 16 por 16 equivale a desplazar la coma decimal un lugar hacia la derecha. De esta manera, multiplicando por 16N, la coma se desplaza N lugares hacia la derecha. El problema original se reduce al cálculo del primer dígito de 16Nπ. Usando la fórmula BBP:
El cálculo de los primeros dígitos hexadecimales a la derecha de la coma de este número no es sencillo por dos razones: el número es muy grande y la suma es infinita.
Supongamos que
. El cálculo de los primeros dígitos hexadecimales de SN(a) permitirá obtener los de 16Nπ, a través de la relación:
Descomponiendo la suma SN(a) en dos:
se pueden calcular AN(a) y BN(a) en forma independiente.
Cálculo de BN(a)
Aunque se trata de una suma infinita, es muy fácil de calcular, porque sus términos son pequeños y decrecen rápidamente.
- En efecto, el primer término de la suma es:
. Si se busca el enésimo dígito hexadecimal de π (N = 1 000 000 000 por ejemplo), el primer término es mucho menor que 1. - Además, cada término tiene un cero más a la derecha de la coma que el precedente, porque para k ≥ N, bk > 16 bk+1:
. Finalmente, la suma BN(a) es de la forma (en el peor caso):
![{\displaystyle +\ 0,0*********.\ .\ .\ }](https://wikimedia.org/api/rest_v1/media/math/render/svg/e982c5bbe7abaab42bcb173c878e708a1831eada)
![{\displaystyle +\ 0,00********.\ .\ .\ }](https://wikimedia.org/api/rest_v1/media/math/render/svg/aef920c72a897eadfdbb2e6bacc7c1030a890d81)
![{\displaystyle +\ 0,000********.\ .\ .\ }](https://wikimedia.org/api/rest_v1/media/math/render/svg/509d3ad0bce57e5bd4be48facf81cc9dd938270f)
Por lo tanto, para obtener BN(a) con una precisión de P cifras detrás de la coma, es suficiente calcular los P primeros términos de la suma, agregándose algunos términos más para evitar errores que aparecen al realizar cálculos con valores aproximados.
Así, se calcula:
Como esta suma solo posee una pequeña cantidad de términos, el tiempo que insume esta operación es insignificante para una computadora.
Cálculo de AN(a)
El problema para el cálculo de AN(a) es que los primeros términos son muy grandes (N cifras de base 16 antes de la coma). Sin embargo, al igual que las primeras cifras detrás de la coma, no importa la parte entera, que también es grande. Por lo tanto, puede "eliminarse" usando aritmética modular.
Toda la dificultad se reduce a hallar la parte fraccionaria de
. Para ello realizamos la división entera de 16N-k por 8k+a:
Así
es menor que 1, por lo tanto, es la parte fraccional de
.
Y
Así, se calcula:
.
Utilizando el método de la exponenciación binaria,
se calcula rápidamente (con un tiempo de ejecución de O(log2(N-k)).
Conclusión
Al fin y al cabo, para obtener los primeros dígitos de π base 16 (o 2), se deben calcular los primeros dígitos de:
con
.
Complejidad de este método
Para calcular el enésimo dígito de π en base 16 (o el 4n-ésimo dígito en base 2):
Complejidad temporal
- Bn'(a) se calcula en complejidad lineal (O(1))
- An'(a) : utilizando el método de la exponenciación binaria, sus términos se calculan en O(log2(n)). Así la suma de n términos, An'(a), se calcula en O(n*log2(n)).
Así Sn'(a) se calcula en O(1)+O(n*log2(n))=O(n*log2(n)). Finalmente, πn se calcula en 4*O(n*log2(n))=O(n*log2(n)).
Por lo tanto el tiempo de cálculo es proporcional a n*log2(n), es decir, casi lineal.
Complejidad espacial
La complejidad en el uso de memoria es constante, ya que solo se realizan sumas sucesivas de pequeños números (con una precisión de unos diez decimales es suficiente).
Fórmulas derivadas
Simon Plouffe
Fórmula original :
La última fórmula permite hallar dígitos aislados de
en base 3 o 9.
Viktor Adamchick y Stan Wagon (1997)
Fabrice Bellard
Los récords
Para poder comparar, hasta el año 2008 se habían obtenido los primeros 1,241 billones de decimales de π (aproximadamente 4,123 billones de bits).
- 7 de octubre de 1996 (Fabrice Bellard): dígito número 400 mil millones en base 2
- septiembre de 1997 (Fabrice Bellard) : billonésimo dígito en base 2
- febrero de 1999 (Colin Percival) : dígito número 40 billones en base 2
- 2001: dígito número 4000 billones en base 2
- 2011: dígito número 10 billones en base 10
Cálculo del enésimo decimal
Actualmente, no existe ninguna fórmula eficaz para hallar el enésimo decimal de π en base 10. Simon Plouffe ha desarrollado en diciembre de 1996, a partir de una serie muy antigua que calcula π basado en los coeficientes de binomio de Newton, un método para calcular cifras aisladas base 10, pero debido a su complejidad O(n3*log2(n)) pierde su utilidad en la práctica. Fabrice Bellard ha mejorado el algoritmo para alcanzar un nivel de complejidad en O(n2), pero no es suficiente para competir con los métodos convencionales que calculan todos los decimales.
Anexo: demostración de la fórmula BBP
Se demuestra primero el siguiente resultado general:
![{\displaystyle \forall n\in \mathbb {N} :\sum _{k=0}^{\infty }{\frac {1}{16^{k}(8k+n)}}={\sqrt {2}}^{n}\sum _{k=0}^{\infty }{\frac {\left({\frac {1}{\sqrt {2}}}\right)^{8k+n}}{8k+n}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/de9c648e3771e7859595c392f82355d667220e74)
![{\displaystyle ={\sqrt {2}}^{n}\sum _{k=0}^{\infty }\left[{\frac {x^{8k+n}}{8k+n}}\right]_{0}^{\frac {1}{\sqrt {2}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/754eb65a5cfcb116b229157076cf40718732297f)
![{\displaystyle ={\sqrt {2}}^{n}\sum _{k=0}^{\infty }\left(\int _{0}^{\frac {1}{\sqrt {2}}}x^{n+8k-1}dx\right)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/81f2e27eff3cbad9577068ff633213f6a81ebea4)
![{\displaystyle ={\sqrt {2}}^{n}\int _{0}^{\frac {1}{\sqrt {2}}}\left(\sum _{k=0}^{\infty }x^{n+8k-1}\right)dx}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9e97eb455088ffa41d9cc2e44b7e2cd47aba9ff0)
![{\displaystyle ={\sqrt {2}}^{n}\int _{0}^{\frac {1}{\sqrt {2}}}{\bigg (}x^{n-1}\underbrace {\sum _{k=0}^{\infty }\left(x^{8}\right)^{k}} {\bigg )}dx}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c96928660b9a014acbf7be7b684255971dd99902)
![{\displaystyle ={\sqrt {2}}^{n}\int _{0}^{\frac {1}{\sqrt {2}}}{\bigg (}x^{n-1}{\frac {1}{1-x^{8}}}{\bigg )}dx}](https://wikimedia.org/api/rest_v1/media/math/render/svg/771dd63948fb8e51a540d14254a4fe59e45e082e)
- por lo tanto:
![{\displaystyle \sum _{k=0}^{\infty }{\frac {1}{16^{k}(8k+n)}}={\sqrt {2}}^{n}\int _{0}^{\frac {1}{\sqrt {2}}}{\frac {x^{n-1}}{1-x^{8}}}dx}](https://wikimedia.org/api/rest_v1/media/math/render/svg/8e7f47e8881dc20c851754470501007748cb7ebd)
Aplicando este resultado a la fórmula BBP:
![{\displaystyle \sum _{k=0}^{\infty }{\frac {1}{16^{k}}}\left({\frac {4}{8k+1}}-{\frac {2}{8k+4}}-{\frac {1}{8k+5}}-{\frac {1}{8k+6}}\right)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e3fbf10db9630a3b79dada475be5fa6114f020f6)
![{\displaystyle =4\sum _{k=0}^{\infty }{\frac {1}{16^{k}(8k+1)}}-2\sum _{k=0}^{\infty }{\frac {1}{16^{k}(8k+4)}}-\sum _{k=0}^{\infty }{\frac {1}{16^{k}(8k+5)}}-\sum _{k=0}^{\infty }{\frac {1}{16^{k}(8k+6)}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c7badb7f1144c8ce40047f33101a3c1a33f8b595)
![{\displaystyle =4\left({\sqrt {2}}^{1}\int _{0}^{\frac {1}{\sqrt {2}}}{\frac {x^{1-1}}{1-x^{8}}}dx\right)-2\left({\sqrt {2}}^{4}\int _{0}^{\frac {1}{\sqrt {2}}}{\frac {x^{4-1}}{1-x^{8}}}dx\right)-\left({\sqrt {2}}^{5}\int _{0}^{\frac {1}{\sqrt {2}}}{\frac {x^{5-1}}{1-x^{8}}}dx\right)-\left({\sqrt {2}}^{6}\int _{0}^{\frac {1}{\sqrt {2}}}{\frac {x^{6-1}}{1-x^{8}}}dx\right)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/c2822a0c2082a8c2649cd262be3342a713c9fb20)
![{\displaystyle =\int _{0}^{\frac {1}{\sqrt {2}}}{\frac {4{\sqrt {2}}-8x^{3}-4{\sqrt {2}}x^{4}-8x^{5}}{1-x^{8}}}dx}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0fa8199d7808db6a3162d36f9f3ccef85849b9ba)
Sustituyendo
:
![{\displaystyle =\int _{0}^{1}\left({\frac {4{\sqrt {2}}-{\frac {8}{{\sqrt {2}}^{3}}}y^{3}-{\frac {4{\sqrt {2}}}{{\sqrt {2}}^{4}}}y^{4}-{\frac {8}{{\sqrt {2}}^{5}}}y^{5}}{1-{\frac {1}{{\sqrt {2}}^{8}}}y^{8}}}\right){\frac {dy}{\sqrt {2}}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/29561d9a0e6eae15031da3ef2e4a693628980f52)
![{\displaystyle =16\int _{0}^{1}{\frac {4-2y^{3}-y^{4}-y^{5}}{16-y^{8}}}dy}](https://wikimedia.org/api/rest_v1/media/math/render/svg/84a792bd97ced11aa7839d3318d40588473f838b)
![{\displaystyle =16\int _{0}^{1}{\frac {y-1}{(y^{2}-2y+2)(y^{2}-2)}}dy}](https://wikimedia.org/api/rest_v1/media/math/render/svg/59fb67e4624fef7fcfacb2a6fb64c49e8f2d537a)
Descomponiendo en fracciones simples:
![{\displaystyle =\int _{0}^{1}\left({\frac {8-4y}{y^{2}-2y+2}}+{\frac {4y}{y^{2}-2}}\right)dy}](https://wikimedia.org/api/rest_v1/media/math/render/svg/f207339ba410a695bb5f95c5997ab4142bb6b99c)
![{\displaystyle =-2\int _{0}^{1}{\frac {2y-2}{y^{2}-2y+2}}dy+4\int _{0}^{1}{\frac {1}{1+(y-1)^{2}}}dy+2\int _{0}^{1}{\frac {2y}{y^{2}-2}}dy}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4b40c3c66f1d4fb85277b94ff0de6a61d88fb8c6)
![{\displaystyle =-2\left[\ln(y^{2}-2y+2)\right]_{0}^{1}+4\left[\arctan(y-1)\right]_{0}^{1}+2\left[\ln(2-y^{2})\right]_{0}^{1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/128aa6fe1fe61c13fdae33dbc383844f874a471e)
![{\displaystyle =-2\ln(1)+2\ln(2)+4\arctan(0)-4\arctan(-1)+2\ln(1)-2\ln(2)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/93bffc4524f252657d5c2a3e5e4c5fd92afa01d8)
![{\displaystyle =4\arctan(1)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/42a2827e56ea8c9a991cd8ee2c91cb50104e86ab)
![{\displaystyle =\ \pi }](https://wikimedia.org/api/rest_v1/media/math/render/svg/5e5a6de1a400cd095e24940c3c8e6bf557cd74a5)
Véase también
Referencias
- ↑ The Quest for Pi Archivado el 27 de septiembre de 2011 en Wayback Machine. (en inglés)
Datos: Q803807