Я ищу, чтобы вычислить n-я цифра Pi в среде с низкой памятью. Поскольку у меня нет десятичных знаков, это integer-only BBP algorithm in Python было отличной отправной точкой. Мне нужно только вычислить одну цифру Pi за раз. Как определить самый низкий, который я могу установить D, «количество цифр рабочей точности»?Требуемая точность работы для алгоритма BBP?
D = 4 дает мне много правильных цифр, но несколько цифр будут отключены одним. Например, вычисление цифры 393 с точностью 4 дает мне 0xafda, из которой я извлекаю цифру 0xa. Однако правильная цифра равна 0xb.
Независимо от того, насколько высок я устанавливаю D, кажется, что тестирование достаточного количества цифр находит тот, где формула возвращает неверное значение.
Я попытался повысить точность, когда цифра «близка» к другой, например. 0x3fff или 0x1000, но не может найти хорошего определения «close»; например, вычисление на цифре 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]))
Хотя я тестирую много цифр, я вычисляю каждую цифру по одному. Вы говорите, что нет способа узнать, какая точность необходима для получения правильной цифры в определенном месте? – tba
@brainfsck: вы могли бы использовать ** экстраполяцию ** на данные, которые у вас уже есть ... это может быть нелегко. – ANeves
Я просто смотрю на это сейчас, чтобы узнать, могу ли я объяснить, где происходит ошибка округления. Но имейте в виду, что используемый сценарий не предназначен для создания последовательных цифр - он петли от 0..n - поэтому вычисление n-й цифры занимает время, пропорциональное n, что далеко не идеально. Страница wikipedia имеет более строгий алгоритм для создания цифр один за другим - можете ли вы использовать это? – mdma