作者LPH66 (IWH68S0XZ8M89)
看板Programming
標題Re: [問題] 基本程式設計概念的問題
時間Mon Jan 21 11:40:03 2008
※ 引述《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