低メモリ環境で Piのn桁目を計算しようとしています。利用できる小数がないので、このPython の整数のみの BBP アルゴリズムは、優れた出発点でした。一度に 1 桁の Pi を計算するだけで済みます。D に設定できる最小値、つまり「作業精度の桁数」をどのように決定できますか?
D=4 は多くの正しい数字を与えてくれますが、いくつかの数字は 1 桁違います。たとえば、数字 393 を精度 4 で計算すると 0xafda が得られ、そこから数字 0xa を抽出します。ただし、正しい桁は 0xb です。
D をどれだけ高く設定しても、十分な桁数をテストすると、式が正しくない値を返す桁が見つかるようです。
0x3fff や 0x1000 など、数字が別の数字に「近い」場合は精度を上げてみましたが、「近い」の適切な定義が見つかりません。たとえば、数字 9798 で計算すると 0x c de6 が得られます。これは 0xd000 にあまり近くありませんが、正しい数字は 0xd です。
このアルゴリズムを使用して特定の数字を計算するために必要な作業精度を把握するのを手伝ってくれる人はいますか?
ありがとうございました、
参照用に編集
:
精度 (D) 最初の桁が間違っています ------------- ------------------ 3 27 4 161 5 733 6 4329 7 21139 8+ ???
一度に 1 桁ずつ計算していることに注意してください。
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]) )