→ firejox:我覺得精確度沒什麼差別如果你是先乘完最後一次除的話 05/03 21:18
※ 引述《yauhh (喲)》之銘言:
: 接著你的討論,想問個問題.
: 計算放到現實總是相當討厭,會碰到具體的限制. 就一般所知道,浮點數
: 在加減法方面會有一點點不精確性,而在乘除法方面則會因此產生成倍數的不精確.
: 於是,你將一個 e 遞迴在除法上,則除一次,除二次,除三次, ...,
: 不精確性一直累積出來.
: 同樣一個 e, 我可能拆成 1 + 1/1! + 1/2! + 1/3! + ... + 1/n!,
: 分母先自己乘,因為都是整數所以分母沒有不精確性,然後每項分別除,然後加總.
: 雖然除了蠻多次,但是因為除法是包含在同一層加法裡頭,所以不精確性比連除好幾次
: 少很多(吧?).
: 那麼,請問你解這個問題,該如何檢查先加再除或先除再加的精確性?
不可否認,先算出每個1/n!再加總其精確度較高。
不過在程式裡有一個關鍵,就是resize()這個方法。
當每個1/n一開始都算到算到小數點以下2000位時,
之後的2000位乘上2000位會是4000位左右,我只再取前2000位。
所以,如果不resize(),一直遞迴下去,
總位數會很龐大,速度會很慢。
當初的想法就是覺得這應該已經比2000位精確很多了。(不負責任的直覺)
至於為什麼我不想先做1/n!係因為我很想避開惱人的大數除法。
而n和精確度p取一樣的數值只是我很懶得去精算n和p的關係。
最後我把為什麼我會想寫這程式的原因交代一下,
因為我在對岸看到了這個網頁:http://wenwen.soso.com/z/q211633839.htm
上面的牛人把e的小數點以下2000位都列出來了。
除了最後一位數以外(我猜他4捨5入),2000位應該沒什麼大問題。
不過前提是他列出來的是對的答案。
題外話,其實我也寫了(1 + 1/n)^n,當n趨近無限大時計算e值,
不過效率不彰,n = 10000000000000000LL作D&C精確度也不超過100位。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.251.97