千萬要留意,無論
是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定義為...