1. 程式人生 > >在c/c++中浮點數是否為0的判斷

在c/c++中浮點數是否為0的判斷

efi bit c++ 部分 符號位 eee 小數 sil code

在c/c++中,因為浮點數在內存中的表示是不精確的,會有很微小的誤差,所以判斷是否為0,就看它的絕對值是不是<=eps。

eps可以看成是epsilon的縮寫,可以用來表示一個無窮小的量,通常取eps的值為:1e-10~1e-8 之間。如:

#define eps   1e-10

原理:

IEEE754標準中,單精度浮點數(4byte)表示法:1bit符號位(S),8bit指數位(E,用階碼表示),23bit小數部分(尾數M)。雙精度浮點數(8byte)表示法:1bit符號位,11bit指數位(用階碼表示),52bit小數部分(尾數)。所以一個規格化的單精度浮點數x的真值為x=((-1)^S)*(1.M)*(2^(E-127));顯然,x永遠也不可能為絕對0。故在需要比較的時候,只能把它和一個很小的值比較,如果小於等於eps,則認為是0。

在c/c++中浮點數是否為0的判斷