float 比較【轉(zhuǎn)】
2013-08-14 16:00:18
分類: C/C++
(1)浮點數(shù)的表示是不精確的,不能直接比較兩個數(shù)是否完全相等,一般都是在允許的某個范圍內(nèi)認為像個浮點數(shù)相等。 if ((x >= - EPSINON) && (x <= EPSINON)) 浮點型變量并不精確,其中EPSINON是允許的誤差(即精度),所以不可將float變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。如果寫成if (x == 0.0),則是錯誤的。 因為1.0在計算機中可能存為0.999999或1.00001等,很難恰好是1.0 ----------------- 4.3.3 浮點變量與零值比較 【規(guī)則4-3-3】不可將浮點變量用“==”或“!=”與任何數(shù)字比較。 千萬要留意,無論是float 還是double 類型的變量,都有精度限制。所以一定要 避免將浮點變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。 假設(shè)浮點變量的名字為x,應(yīng)當將 if (x == 0.0) // 隱含錯誤的比較 轉(zhuǎn)化為 if ((x>=-EPSINON) && (x<=EPSINON)) 其中EPSINON 是允許的誤差(即精度)。 |
|