場景:
一個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位。