作者yongtw123 (六円)
看板C_and_CPP
標題Re: [問題] int()的奇怪現象
時間Fri Feb 27 13:35:04 2009
※ 引述《VictorTom (鬼翼&娃娃魚)》之銘言:
: 把小弟穿插在您的code中間的程式碼加進去您的試試....
: PS. 用printf是因為小弟跟cout不熟, 如果您cout用得很熟練....
: 可以自行用您習慣的格式化輸出看結果應該也沒關係....
: ==
: 簡單的說結論, 精確度的問題, cout同樣輸出了1.0給你看....
: 但是存在記憶體裡的那64 bits未必真正是存了1.0真正的IEEE 754表示式....
: 因為cout預設輸出的小數位數, 讓它自動幫你做了四捨五入....
: 小弟我用printf強制指定小數位數, 才勉強能夠凸顯它的差異來....
: double的mentisa有52 bits, 換算十進位約15位的有效位數....
: 所以0.(十個9), 不特別指定輸出位數四捨五入起來都像是1....
: 但是只要它真的不到1, int()下去就會全部被強制捨棄小數位掉....
話說這是程式設計課的第一個作業...
第一回就碰到這麼多問題
雖然大大的程式碼和解釋有7成不太懂 (XD)
但重點是"精確度"
於是我就想到利用round()
再用floor()
問題就解決了!
感謝! 噢!
學到一課了啊!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.160.55
推 VictorTom:Ma~~第一堂課也沒辦法, 快的話後面幾堂就懂得差不多了.y 02/27 13:38
→ VictorTom:不過浮點精確度問題, 慢一點搞不好到計算機組織才會彈.y 02/27 13:39
→ VictorTom:有興趣想了解有時間的話, 請搜尋 IEEE 754 浮點數表示法 02/27 13:39
→ VictorTom:另外~最簡單的四捨五入, 用 int(原變數+0.5) 就好啦@_@" 02/27 13:41