看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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