float double的內存表示及比較大小的方法

參考:

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章