Я хочу вычислить n -ю цифру числа Пи в среде с низким объемом памяти. Поскольку у меня нет доступных десятичных дробей, этот алгоритм BBP только для целых чисел в Python было отличной отправной точкой. Мне нужно вычислять только одну цифру числа Пи за раз. Как я могу определить наименьшее из возможных значений D, «количество цифр рабочей точности»?
D = 4 дает мне много правильных цифр, но несколько цифр будут отличаться на одну. Например, вычисление цифры 393 с точностью 4 дает мне 0xafda, из которого я извлекаю цифру 0xa. Однако правильная цифра - 0xb.
Независимо от того, насколько высоко я установил D, кажется, что при проверке достаточного количества цифр найдется цифра, в которой формула возвращает неверное значение.
Я пробовал повысить точность, когда цифра "близка" к другой, например 0x3fff или 0x1000, но не могу найти подходящего определения слова «закрыть»; например, вычисление по цифре 9798 дает мне 0x c de6, что не очень близко к 0xd000, но правильная цифра - 0xd.
Может ли кто-нибудь помочь мне выяснить, какая рабочая точность требуется для вычисления данной цифры с использованием этого алгоритма?
Спасибо,
редактировать
Для справки:
precision (D) first wrong digit ------------- ------------------ 3 27 4 161 5 733 6 4329 7 21139 8+ ???
Обратите внимание, что я вычисляю по одной цифре за раз, например:
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]) )