¿Cómo determino si mi cálculo de pi es exacto?

772

Estaba probando varios métodos para implementar un programa que da los dígitos de pi secuencialmente. Probé el método de la serie Taylor , pero resultó converger extremadamente lento (cuando comparé mi resultado con los valores en línea después de algún tiempo). De todos modos, estoy intentando mejores algoritmos.

Entonces, mientras escribía el programa me quedé atrapado en un problema, como con todos los algoritmos: ¿Cómo sé que los ndígitos que he calculado son correctos?

Ishan Sharma
fuente
20
Más de un problema matemático. Los buenos algoritmos también dan una estimación del error.
ejemplo el
35
Comparar contra pi?
Dave Newton el
55
@chris: "¿Literalmente en todas partes"?
Carreras de ligereza en órbita el
32
Puedo verificar por usted hasta 3.141592653589793238462643383279502, más allá de eso, ¿por qué necesita una cantidad tan grande de dígitos? (Eso es algo así como la precisión del nivel atómico con un círculo del tamaño del universo.)
AJ Henderson
65
¿Por qué no divides entre pi y compruebas si el resultado es 1? (es broma)
user541686

Respuestas:

1629

Como soy el actual poseedor del récord mundial de la mayoría de los dígitos de pi, agregaré mis dos centavos :

A menos que esté estableciendo un nuevo récord mundial, la práctica común es verificar los dígitos calculados con los valores conocidos. Entonces eso es bastante simple.

De hecho, tengo una página web que enumera fragmentos de dígitos con el fin de verificar los cálculos en su contra: http://www.numberworld.org/digits/Pi/


Pero cuando entras en territorio de récord mundial, no hay nada con lo que comparar.

Históricamente, el enfoque estándar para verificar que los dígitos calculados son correctos es recalcular los dígitos usando un segundo algoritmo. Entonces, si cualquiera de los cálculos falla, los dígitos al final no coincidirán.

Esto suele hacer más del doble de la cantidad de tiempo necesaria (ya que el segundo algoritmo suele ser más lento). Pero es la única forma de verificar los dígitos calculados una vez que te has adentrado en el territorio desconocido de dígitos nunca antes calculados y un nuevo récord mundial.


En los días en que las supercomputadoras establecían los registros, se usaban comúnmente dos algoritmos AGM diferentes :

Ambos son O(N log(N)^2)algoritmos que fueron bastante fáciles de implementar.

Sin embargo, hoy en día, las cosas son un poco diferentes. En los últimos tres récords mundiales, en lugar de realizar dos cálculos, realizamos solo un cálculo utilizando la fórmula más rápida conocida ( Fórmula Chudnovsky ):

Ingrese la descripción de la imagen aquí

Este algoritmo es mucho más difícil de implementar, pero es mucho más rápido que los algoritmos AGM.

Luego verificamos los dígitos binarios usando las fórmulas BBP para la extracción de dígitos .

Ingrese la descripción de la imagen aquí

Esta fórmula le permite calcular dígitos binarios arbitrarios sin calcular todos los dígitos anteriores. Por lo tanto, se utiliza para verificar los últimos dígitos binarios calculados. Por lo tanto, es mucho más rápido que un cálculo completo.

La ventaja de esto es:

  1. Solo se necesita un cálculo costoso.

La desventaja es:

  1. Se necesita una implementación de la fórmula Bailey – Borwein – Plouffe (BBP).
  2. Se necesita un paso adicional para verificar la conversión de radix de binario a decimal.

He pasado por alto algunos detalles de por qué verificar los últimos dígitos implica que todos los dígitos son correctos. Pero es fácil ver esto, ya que cualquier error de cálculo se propagará a los últimos dígitos.


Ahora este último paso (verificar la conversión) es bastante importante. Uno de los poseedores del récord mundial anterior nos llamó la atención sobre esto porque, inicialmente, no di una descripción suficiente de cómo funcionaba.

Así que saqué este fragmento de mi blog:

N = # of decimal digits desired
p = 64-bit prime number

Ingrese la descripción de la imagen aquí

Calcule A usando aritmética de base 10 y B usando aritmética binaria.

Ingrese la descripción de la imagen aquí

Si A = B, entonces con "probabilidad extremadamente alta", la conversión es correcta.


Para leer más, vea la publicación de mi blog Pi - 5 Trillion Digits .

Místico
fuente
15
Y para responder la otra pregunta sobre cómo saber cuándo un algoritmo específico ha convergido a N dígitos: esto requiere que se conozca el comportamiento de convergencia del algoritmo. La serie Taylor de ArcTan(1)es logarítmicamente convergente. Por lo tanto, necesitaría una cantidad exponencialmente grande de términos para converger; en resumen, no lo use.
Mysticial
21
Sí, la fórmula de Chudnovsky converge a un constante 14.18 dígitos por término. Entonces puede dividir el número total de dígitos por eso para obtener cuántos términos necesita. (El valor exacto es: Log(151931373056000)/Log(10) = 14.181647462725477655...)
Mysticial
77
@ erikb85 Un poco. La fórmula BBP (hasta cierto punto) cuenta como un segundo algoritmo. Pero por sí solo no es suficiente, ya que no verifica la conversión a la base 10. La idea de usar la verificación de conversión BBP + para eliminar la necesidad de un segundo cálculo no era mía. Fabrice Bellard lo hizo por primera vez en su récord mundial de 2009. Fue una idea tan buena que hicimos lo mismo y lo mejoramos.
Mysticial
83
@FunsukWangadu Solo puedo hablar por mí mismo, pero aquí está: nunca me importó Pi en sí. Para mí, es solo otro número. El valor no está en el número mismo o en los 10 terabytes de dígitos inútiles, son los métodos que se utilizan para lograrlo. Los siglos de matemática y las décadas de investigación en informática / programación que contribuyeron a esta hazaña son aplicables a muchos otros campos y, por lo tanto, son MUCHO más valiosos que un disco duro de dígitos. En pocas palabras: calcular los dígitos de Pi es más un deporte.
Mysticial
8
@Mystical, acabo de tropezar con su sitio de cálculo de Pi de otra pregunta de stackoverflow y no pude evitar mirar boquiabierto y reír ante lo que hicieron. Me encantaron los fallos de disco duro / terremotos en los registros :) ¡increíble!
Joe
48

Sin lugar a dudas, para sus propósitos (que supongo que es solo un ejercicio de programación), lo mejor es verificar sus resultados con cualquiera de los listados de los dígitos de pi en la web.

¿Y cómo sabemos que esos valores son correctos? Bueno, podría decir que hay formas informáticas para demostrar que la implementación de un algoritmo es correcta.

Más pragmáticamente, si diferentes personas usan diferentes algoritmos, y todos están de acuerdo en (elegir un número) mil (millones, lo que sea) lugares decimales, eso debería darle una sensación cálida y difusa de que acertaron.

Históricamente, William Shanks publicó pi con 707 decimales en 1873. Pobre hombre, cometió un error comenzando en el 528º decimal.

Muy interesante, en 1995 se publicó un algoritmo que tenía la propiedad de calcular directamente el enésimo dígito (base 16) de pi sin tener que calcular todos los dígitos anteriores .

Finalmente, espero que su algoritmo inicial no pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...haya sido el más simple de programar, pero también es una de las formas más lentas de hacerlo. Consulte el artículo pi en Wikipedia para obtener enfoques más rápidos.

Larry Smith
fuente
77
Esa última fórmula (fórmula de Leibniz, iirc) en realidad alterna la suma y la resta.
Thomas
21

Podría usar múltiples enfoques y ver si convergen en la misma respuesta. O toma algo de la red. El algoritmo de Chudnovsky se usa generalmente como un método muy rápido para calcular pi. http://www.craig-wood.com/nick/articles/pi-chudnovsky/

argentage
fuente
Reduce las posibilidades, pero todavía no puedo estar seguro con la solución de enfoque múltiple, ¿y si ambos están equivocados? Verificar en la red no tiene validez, entonces ¿por qué no quitar los valores de la red misma? Estoy pensando en bbp, ¿cuál es más adecuado?
Ishan Sharma
77
@IshanSharma Si los dos algoritmos son independientes, las posibilidades de que ambos cálculos sean incorrectos con resultados idénticos son prácticamente nulas. Si algo sale mal en cualquiera de los cálculos, los resultados finales no coincidirán, por lo que sabe que al menos uno de ellos está mal.
Mysticial
15

La serie Taylor es una forma de aproximar pi. Como se señaló, converge lentamente.

Se puede demostrar que las sumas parciales de la serie Taylor están dentro de algún multiplicador del próximo término lejos del verdadero valor de pi.

Otros medios de aproximación de pi tienen formas similares de calcular el error máximo.

Sabemos esto porque podemos demostrarlo matemáticamente.

Yakk - Adam Nevraumont
fuente
Secundado Creo que la mayoría de las respuestas aquí no están dando suficiente peso al concepto de prueba matemática . Cualquiera que sea su programa para calcular dígitos de pi, nunca será más convincente que la prueba matemática más convincente de que el método de su programa realmente calcula pi. Lo que sugiere una restricción diferente en los programas que calculan pi: que deberían apuntar tanto a la comprensión como al rendimiento y la corrección.
Luis Casillas
5

Podría intentar calcular sin(pi/2)(o cos(pi/2)para el caso) utilizando la serie de potencia (bastante) convergente rápidamente para sin y cos. (Aún mejor: use varias fórmulas de duplicación para calcular más cercax=0 una convergencia rápida).

Por cierto, mejor que usar series para tan(x)es, con la computación, por ejemplo, cos(x)como un cuadro negro (por ejemplo, podría usar la serie taylor como se indicó anteriormente) es hacer la búsqueda de raíces a través de Newton. Ciertamente, existen mejores algoritmos, pero si no desea verificar toneladas de dígitos, esto debería ser suficiente (y no es tan difícil de implementar, y solo necesita un poco de cálculo para entender por qué funciona).

usuario1974703
fuente
66
No entiendo cómo ayudaría a detectar que el dígito número 1000 está desactivado en 1. Necesitaría valores muy precisos de sin(pi/2)¿no?
Matthieu M.
No estoy seguro de qué decir sobre la respuesta anterior, a menos que sea una broma o algo así. sin (pi / 2) = 1 cos (pi / 2) = 0 Entonces, diría que los que convergen rápidamente.
BentFranklin
15
Supongo que no es obvio para todos que evaluar sin(x)y cos(x)con alta precisión es, de hecho, mucho más difícil que calcular el Pi en sí.
Mysticial
2
Por razones obvias, no debe usar sin (pi / 2) para esto. Es mejor utilizar sin (pi / 6) y asegurarse de que salga exactamente como 1/2.
Robert Lozyniak