1. 程式人生 > >某次double強轉int時精度損失的情況以及原因分析

某次double強轉int時精度損失的情況以及原因分析

今日寫了一段程式碼,把雙精度浮點型強制轉型成整形,發現所得結與預測不符。

結果如下:


既然4.14*100=414,為什麼把強轉之後得到的結果卻是413呢?

我們不如做個實驗,測試一下原因。

實驗如下:


測試發現414-(a*100)並不完全等於0,實際上有一定的誤差。

由f = (414-(a*100)) = 0.000000000和g = ((a*100)-414) = -0.000000000,可以推斷,a*100的值實際是小於414的。

我的分析:計算機並不能用double型中的64bit的0和1精確的表示出4.14,所以4.14只是一個近似值(也許是4.1399999...)

因此a*100實際的值可能是319.99999...(十分接近414,結果被輸出時舍入成414了),導致最後強制轉型成整型的時候413.99999...被舍入到413。

假若有不對的地方,懇請指出!

期待看到大家更好的解釋!!