C語言陷阱 浮點型與零的比較

2021-08-18 08:05:38 字數 708 閱讀 6293

★請看下面的例子,輸出結果是什麼呢?

#includeint main()

上邊的例子輸出結果是不相等。因為浮點數在記憶體中的儲存方式使得有些浮點數在記憶體中無法精確的儲存,這樣就必然有精度的丟失。一旦精度丟失了,就無法使用==直接判斷兩個浮點數是否相等。

所以要想判斷兩個浮點數,就必須設定乙個可以接受的精度,保證誤差在精度範圍內。

●判斷乙個浮點數與0.0是否相等的方法:

#define exp 0.000000000001

float f=0.0001;

if((f>-exp)&&(f

◆推廣:判斷乙個浮點數是否等於20.0

#define exp 0.000000000001

float f=0.0001;

if(((f-20.0)>-exp)&&((f-20.0)

▲應用例項:求一元二次方程的解

#include#include#define exp 0.0000000001

int main()

else

else if (e >= exp)

else

}return 0;

}

浮點數與零的比較

一些筆試 面試寶典之類的書,經常提到浮點數與零的比較。大概是這樣if f 0.0f 0.0000001f 意思是對浮點數的處理,應該是有乙個精度值。對這個問題,也會留意,但體會不深。今天,總算讓我碰到了。比如說,乙個在100 1下的數值a是10 轉變為1000 1的時候,a應該變成b,b是1,但是在...

關於浮點型的運算 比較

1.常見問題 a 0.1 b 0.7 var dump a b 0.8 列印出來的值居然為 boolean false printf 20f a printf 20f b 0.10000000000000000555 0.69999999999999995559 顯然是不相等的。對於常用金額資料比較...

c語言關於浮點型的問題

雖然昨天已經看玩了資料型別,但是並沒有做習題,本以為會很輕鬆,誰知遇到了乙個神奇的問題 書上說 f對應的是float 和double 兩種型別,lf 對應的是long double 這個很容易理解,在c prime plus中描述 double a,b a 3.156e7 scanf f b pri...