C語言判斷浮點數是否等於0 引申判斷兩浮點數相等

2021-08-21 19:38:00 字數 1079 閱讀 7051

float,double分別遵循r32-24,r64-53的標準,

​​他們的位數分別是23,52,

即誤差在2^-23,2^-52;

所以float的精度誤差在1e-6,double精度誤差在1e-15 。

所以要判斷乙個單精度浮點數:則是if( fabs(f_float) <= 1e-6);

要判斷乙個雙精度浮點數:則是if( fabs(d_double) <= 1e-15 );

判斷兩個浮點數相等:

if( fabs(a_float-b_float) <= 1e-6);

if( fabs(x_double-y_double) <= 1e-15);

#define float_eps 1e-6

#define double_eps 1e-15

float f_float,f1_float,f2_float;

double d_double,d1_double,d2_double;

/* 要判斷乙個單精度浮點數等於0 */

if( fabs(f_float) <= float_eps );

/* 要判斷乙個雙精度浮點數等於0 */

if( fabs(d_double) <= double_eps );

/* 要判斷兩個浮點數是否相等 */

if( fabs(f1_float-f2_float) <= float_eps );

if( fabs(d1_double-d2_double) <= double_eps );

常用定義巨集:

#define float_eps 1e-6

#define double_eps 1e-15

eps=epsilon(=ε)

補充:abs與fabs區別

abs 返回整形資料的絕對值。

標頭檔案:#include

用 法: int abs(int i);

fabs 返回浮點資料的絕對值。

標頭檔案:#include

用法:float fabs(float x);

求絕對值的資料型別是整形就用abs,是浮點型就用fabs。

浮點數判斷是否為0

浮點數因為儲存形式的原因不能直接和0值比較,當要判斷乙個浮點數是否等於0時 fabs x 1e 6 就是認為是0了 float,double分別遵循r32 24,r64 53的標準。所以float的精度誤差在1e 6 double精度誤差在1e 15 所以要判斷乙個單精度浮點數 則是if abs f...

判斷浮點數是否為0

看到論壇上有人問 精確判斷乙個浮點數是否等於0,不要用if data 1e 10 類似的做法。其實我們了解下計算機中是怎樣儲存浮點數的,這個問題的答案就很明了了。ieee754標準中,單精度浮點數 4byte 表示法 1bit符號位 s 8bit指數字 e,用階碼表示 23bit小數部分 尾數m 雙...

精確判斷乙個浮點數是否等於0

看到論壇上有人問 精確判斷乙個浮點數是否等於0,不要用if data 1e 10 類似的做法。其實我們了解下計算機中是怎樣儲存浮點數的,這個問題的答案就很明了了。ieee754標準中,單精度浮點數 4byte 表示法 1bit符號位 s 8bit指數字 e,用階碼表示 23bit小數部分 尾數m 雙...