[問題] 如何cast才能不失精度

看板C_and_CPP (C/C++)作者 ( )時間16年前 (2009/12/17 18:40), 編輯推噓1(1012)
留言13則, 5人參與, 最新討論串1/1
程式如下 size_t m_Size = 10000; size_t result1 = (1-0.025)*m_Size; double result2 = (1-0.025)*m_Size; cout << result1 << endl; cout << result2 << endl; BCB 6 的執行結果: 9749 9750 我想要利用轉型的方式使 result1 = 9750 但是一連用了幾個static_cast都無法實現; 即使是將result宣告成搭配cast。 想請問是否有方法能在m_Size為size_t的情況下 使得size_t result1 或 int result1為9750. 謝謝! (除了 result1 = result2; //XD) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.63.154

12/17 18:45, , 1F
用兩個整數記整數和小數部份, 不然二進位不可能 "一定精確"
12/17 18:45, 1F

12/17 18:45, , 2F
只能保證精準度到幾位
12/17 18:45, 2F

12/17 18:52, , 3F
…電腦只認得 0 與 1,它不是你想像中的那麼聰明 @_@!
12/17 18:52, 3F

12/17 19:42, , 4F
話說我剛用VS2008跑都是9750耶XD?
12/17 19:42, 4F

12/17 20:17, , 5F
剛回家用2005也是9750 @@ 可是0.025的IEEE754可以表示阿
12/17 20:17, 5F

12/17 20:18, , 6F
印象中可以阿 @@
12/17 20:18, 6F

12/17 20:38, , 7F
剛剛試了一下 會錯的地方在 最後的隱式轉型至size_t
12/17 20:38, 7F

12/17 20:39, , 8F
看來是無解了
12/17 20:39, 8F

12/17 21:51, , 9F
浮點轉整數時做個+0.5再取整的四捨五入動作不行嗎??
12/17 21:51, 9F

12/17 21:57, , 10F
另外, release built有可能因為FP reg的最佳化, 運氣好
12/17 21:57, 10F

12/17 21:58, , 11F
得到正確的結果, 但是可以的話, +0.5取整是通解:)
12/17 21:58, 11F

12/17 22:01, , 12F
吽 好辦法 謝謝您
12/17 22:01, 12F

12/17 22:35, , 13F
0.025 不行吧 ? @@ 0.25 或 0.125 才可以吧 ?
12/17 22:35, 13F
文章代碼(AID): #1BAWgQP_ (C_and_CPP)
文章代碼(AID): #1BAWgQP_ (C_and_CPP)