float型變數和「零值」比較的方法

2021-08-20 19:18:27 字數 779 閱讀 8005

千萬要留意,無論

是float還是double型別的變數,都有精度限制。所以一定要避免將浮點變數用「==」或「!=」與數字比較,應該設法轉化成「>=」或「<=」形式。

假設浮點變數的名字為x,應當將 

if (x == 0.0) // 隱含錯誤的比較

轉化為 

if ((x>=-epsinon) && (x<=epsinon))

其中epsinon是允許的誤差(即精度)。

double和float的epsinon是不同的。ansi c已經定義了這些常量:

float.h裡面有許多關於浮點型別的定義。

如:flt_epsilon

dbl_epsilon

ldbl_epsilon

檢視include檔案,在float.h標頭檔案中有很多關於浮點數的巨集定義:

#define flt_epsilon                1.19209290e-07f

#define ldbl_epsilon                1.084202172485504e-19[/quote]

我們自己定義flt_epsilon一般定義為const int flt_epsilon=1e-6;

這兩個巨集定義可用來作為float、 long double趨0最小的判斷值。即:

#include ;

double a, b; 

if( (a-b) <= flt_epsilon ||  (a-b) >= -flt_epsilon

)

變數與零值比較

l 不可將布林變數直接與true false或者1 0進行比較。根據布林型別的語義,零值為 假 記為false 任何非零值都是 真 記為true true的值究竟是什麼並沒有統一的標準。例如visual c 將true定義為1,而visual basic則將true定義為 1。假設布林變數名字為fl...

各變數與零值比較!!!

一 bool變數與零值比較。bool型別的定義中,零值為假 false 任何非零值都為真!所以不可將bool變數直接與true,false,0,或者1來比較!比如 char flag a if flag printf true n else if flag printf false n 二 整型變數...

各種變數與零值的比較

1 布林 bool 變數與零值比較 不可將布林變數直接與true false或者1 0進行比較。根據布林型別的定義,零值為 假 記為false 任何非零值都是 真 記為true true的值是什麼並沒有統一標準。例如,visual c 將true定義為1,而visual basic則將true定義為...