參考:
float和double類型的內存分佈和比較方法收藏
Comparing floating point numbers
總結幾點:
0. float佔4byte,精度是6~7位;double佔8byte,精度是15~16位。
1. C/C++的浮點數據類型有float和double兩種。它們在內存中是以科學計數法的結果來存儲的。
類型float大小爲4字節,即32位,內存中的存儲方式如下:
符號位(1 bit) |
指數(8 bit) |
尾數(23 bit) |
類型double大小爲8字節,即64位,內存佈局如下:
符號位(1 bit) |
指數(11 bit) |
尾數(52 bit) |
符號位決定浮點數的正負,0正1負。
指數和尾數均從浮點數的二進制科學計數形式中獲取。
2. 關於比較大小
一般情況下用一個absolute epsilon value來比較(if (fabs(result - expectedResult) < 0.00001))就夠了。但是在某些對數字精度有特殊要求的domain,比如graphic,需要用更合理的方法。具體,參見引用文獻2.
Comparing for equality
Comparing with epsilon – absolute error
Comparing with epsilon – relative error