看板 Programming 關於我們 聯絡資訊
※ 引述《sjgau (sjgau)》之銘言: : 底下,我用 Dev-C++ 實作,得到的結果和 您的構想不同。 : 當然啦!我不會否定 您的想法,我只是想說明一件事, : 程式設計這種東西,一定要實際做過一遍,才能拿來說嘴。 : 否則,很容易得到不同的結果。 : 我很清楚怎麼 一回事情,這種東西討論起來, : 沒完沒了。 well, 只是個四捨五入的差別而已 FPU計算時的四捨五入機制把它處理掉了 也許要用大一點的數才能看得出差別 (例如1.0/11111111.0再乘回來之類的) (←當然這也是亂說的也沒試過) 講個經典的例子比較能夠感受得到這個問題的重要性: 幾個月前Excel 2007爆出大Bug 當它計算850*77.1時不是得到正確的65535 卻竟然出現100000的答案 微軟的官方解釋是 http://blogs.msdn.com/excel/archive/2007/09/25/calculation-issue-update.aspx 據說是因為浮點數轉字串的程式裡因為浮點數誤差 導致這些原本是65535-2^(-35)等的數字正好戳中程式的bug 才會吐出100000的答案 這個浮點數誤差的來源正是那個77.1 77.1表示成二進位時那個.1是二進位循環小數 所以再乘850回去時這個誤差就放大到四捨五入蓋不掉 然後這個誤差又戳中了那段bug才會有這個結果 -- 順便提一下 手邊有Excel 2007卻還沒修好(或還沒Windows Update過)的人 這裡是官方patch: http://support.microsoft.com/kb/943075/ (即是Windows Update上的那一份 KB943075/KB943076) -- 実琴:「河野!你真的就這樣被物質慾望給吸引過去了嗎?!」 亨:「只要穿著女裝擺出親切的樣子,所有必要花費就能全免,似乎一點都不壞啊。」 実琴:「難道你沒有男人的尊嚴了嗎?!」 亨:(斷然道)「沒有。在節衣縮食生活吃緊學生面前,沒有那種東西。」 --プリンセス・プリンセス 第二話 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.250.80
sjgau:不只是 四捨五入的問題。還牽涉到 浮點數 211.77.241.3 01/21 11:47
sjgau:如何儲存,計算,顯示的問題。 211.77.241.3 01/21 11:48
LPH66:還有不少細節方面的啦 不過如你所說 219.84.44.21 01/22 22:14
LPH66:這東西要細講就沒完沒了了 XD 219.84.44.21 01/22 22:15