Estoy buscando para calcular el n º dígito de Pi en un entorno de memoria baja. Como no tengo decimales disponibles, este integer-only BBP algorithm in Python ha sido un excelente punto de partida. Solo necesito calcular un dígito de Pi a la vez. ¿Cómo puedo determinar el valor más bajo que puedo establecer D, el "número de dígitos de precisión de trabajo"?Precisión de trabajo requerida para el algoritmo BBP?
D = 4 me da muchos dígitos correctos, pero algunos dígitos estarán desactivados en uno. Por ejemplo, calcular el dígito 393 con precisión de 4 me da 0xafda, de donde extraigo el dígito 0xa. Sin embargo, el dígito correcto es 0xb.
No importa qué tan alto establezca D, parece que al probar un número suficiente de dígitos se encuentra uno en el que la fórmula devuelve un valor incorrecto.
He intentado aumentar la precisión cuando el dígito está "cerca" de otro, p. Ej. 0x3fff o 0x1000, pero no se puede encontrar una buena definición de "cerrar"; por ejemplo, el cálculo en el dígito 9798 me da 0x c de6, que no está muy cerca de 0xd000, pero el dígito correcto es 0xd.
¿Alguien me puede ayudar a calcular cuánta precisión de trabajo se necesita para calcular un dígito dado usando este algoritmo?
Gracias,
edición
Para Referencia:
precision (D) first wrong digit ------------- ------------------ 3 27 4 161 5 733 6 4329 7 21139 8+ ???
en cuenta que estoy calculando un dígito a la vez, por ejemplo:
for i in range(1,n):
D = 3 # or whatever precision I'm testing
digit = pi(i) # extracts most significant digit from integer-only BBP result
if(digit != HARDCODED_PI[i]):
print("non matching digit #%d, got %x instead of %x" % (i,digit,HARDCODED_PI[i]))
Aunque estoy probando muchos dígitos, estoy calculando cada dígito de a uno por vez. ¿Estás diciendo que no hay manera de saber cuánta precisión se necesita para obtener un dígito correcto en una ubicación determinada? – tba
@brainfsck: ciertamente podría usar ** extrapolación ** en los datos que ya tiene ... aunque puede que no sea fácil. – ANeves
Estoy investigando esto ahora, para ver si puedo explicar dónde está ocurriendo el error de redondeo. Pero tenga en cuenta que la secuencia de comandos que está utilizando no tiene la intención de producir dígitos secuenciales, sino de 0..n, por lo que calcular el n-ésimo dígito lleva un tiempo proporcional a n, que está lejos de ser ideal. La página wikipedia tiene un algoritmo de espiga verdadero para generar dígitos uno por uno. ¿Puedes usar eso? – mdma