Re: [問題] int()的奇怪現象

看板C_and_CPP (C/C++)作者 (六円)時間16年前 (2009/02/27 13:35), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串3/4 (看更多)
※ 引述《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

02/27 13:38, , 1F
Ma~~第一堂課也沒辦法, 快的話後面幾堂就懂得差不多了.y
02/27 13:38, 1F

02/27 13:39, , 2F
不過浮點精確度問題, 慢一點搞不好到計算機組織才會彈.y
02/27 13:39, 2F

02/27 13:39, , 3F
有興趣想了解有時間的話, 請搜尋 IEEE 754 浮點數表示法
02/27 13:39, 3F

02/27 13:41, , 4F
另外~最簡單的四捨五入, 用 int(原變數+0.5) 就好啦@_@"
02/27 13:41, 4F
文章代碼(AID): #19ftk9Iu (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #19ftk9Iu (C_and_CPP)