單精度浮點數(float)加法計算出錯


場景:

  一個float型的變量賦值1170601,加上19000000,結果出現錯誤。

 

原因:

  float占用4個字節(32位)存儲空間,包括符號位1位,階碼位8位,尾數23位。浮點數精度與它的尾數有關。

  尾數為二進制小數1.m,m為23位的小數。所以浮點數的精度為24位二進制有效位數。2的24次方為16777216。

  19000000 > 16777216,做加法計算之后丟失精度導致結果出錯。

 

解決方法:

  將float用double替換,double占用8個字節(64位)存儲空間,包括符號位1位,階碼位11位,尾數52位。

  

 


免責聲明!

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



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