我期待在低內存環境下計算Pi的第 n。由於我沒有小數點,所以這個integer-only BBP algorithm in Python是一個很好的起點。我只需要一次計算Pi的一個數字。 如何確定最低可以設置的D,「工作精度的位數」?BBP算法所需的工作精度?
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]))
儘管我正在測試很多數字,但我一次只計算一位數字。你是說沒有辦法知道在給定的位置獲得一個正確的數字需要多少精度? – tba 2010-05-30 19:39:36
@brainfsck:你當然可以對你已經擁有的數據使用**外推**,但這可能並不容易。 – ANeves 2010-05-31 10:43:33
我只是在研究這個問題,看看我能否解釋舍入錯誤發生的位置。但請注意,您使用的腳本並不打算產生順序數字 - 它從0..n循環 - 因此計算第n位數字需要的時間與n成比例,這遠非理想。維基百科頁面還有一個真正的spigot算法,用於逐一生成數字 - 您可以使用它嗎? – mdma 2010-06-02 20:51:31