2016-07-04 56 views
0

爲了好玩,我試圖實現Chudnovsky算法來使用任意精度浮點庫來計算java中的pi值。有一件事讓我想到,我需要計算1/n的倒數,因爲公式被描述爲1/pi = sum(...)浮點運算中的倒數的精度

精度的多少個有效數字/需要浮點數n,以使1/n具有所需的精度?有這個簡單的答案嗎?我試着做一些計算,比如1/0.100009999999 = 9.99900010009,用小數點後五位正確的數字來確定0.1的倒數。我發現如果我在小數點後面取前三位數字,並將結果四捨五入,我會得到正確的值10,但是在1/n操作之後有多少數字是正確的一般規則?我也對同樣的結果感興趣,但是在二進制和十六進制的基礎上。

嘗試谷歌搜索和快速搜索Stackoverflow,但沒有找到任何以前的答案。如果重複存在,道歉。

+1

對於pi(因爲它在1到10之間),它應該在一個數字的範圍內。所以要獲得千位數的精度,您需要高達1001位的倒數精度。你需要確切地知道嗎?無論如何,在精確度結束時您會得到估計值,所以在這裏或那裏一位數字幾乎沒有問題?我希望你沒有使用任何語言的內置double/float值來測試任何內容...... –

+0

謝謝你的輸入。對於一個不是pi的數n,一般的答案是什麼(因爲pi不是基數2中的1到10)?不,我不使用內置的雙/浮動。我將使用Java的內置BigDecimal或apfloat – user1661303

回答

1

您想計算1/x,但計算1 /(x + d),其中d = delta x截斷誤差。由二項式定理,

1/(x+d) = (x-d)/(x²-d²) 

因爲我們可以假設D²遠遠低於任何浮點錯誤,倒數的錯誤是-d/X 2和更相關的相對誤差爲-d/X。

這證實了Artur Biesiadowski的評論,如果1/x在1和10之間,那麼在最壞的情況下誤差放大倍數是10倍。