記C語言浮點數運算處理 "坑" 一則


看一小段C語言程序:

int main() { float x = 1.3; x = x - (int)x; int i = (int)(x*10); return 0; }

在你心目中, 變量 I 是怎樣的結果?

如果你理所當然地認為是3的話, 那么你就錯了~~~

實際結果應該是2.   為什么?

簡而言之, x在內存的值並不是精確的1.3, 實際上可能是1.29999999......

因為在計算機組成原因中有說過, 浮點數無法被准確地表示出來, 只能是一個非常精確的值..

 

就算現在你已經知道這個"坑"了, 但還是不小心會犯, 所以務必要牢記~~~

 

處理辦法:

1. 使用精度更高的double.

2. 取整之前四舍五入(加上一個非常小的0.00000.......005, 但要注意浮點數的精度范圍), 就像下面這樣.

int main() { float x = 1.3; x = x - (int)x; int i = (int)(x*10+0.00005); return 0; }

同時也要值得注意的是, 這個四舍五入的操作只能用於取整的時候, 你不能加在原浮點值上面改變了原來的浮點數值.

 

女孩不哭 @ cnblogs.com/memset @ 2014-05-02


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM