double比較大小

2021-07-04 23:30:24 字數 1112 閱讀 3031

**

參考:comparing floating point numbers 

總結幾點:

0. float佔4byte,精度是6~7位;double佔8byte,精度是15~16位。 

1. 因為double型別或float型別都是有精度的,其實都是取的近似值,所以有個誤差。和乙個很小的數比如0.00000001(1e-8)比較就是為了在這個誤差範圍內進行比較。

舉個例子如double b = 0.123456可能是0.1234561的四捨五入後得到的結果。最後的0.0000001就表示誤差範圍了。
無論是float還是double型別的變數,都有精度限制。所以一定要避免將浮點變數用「==」或「!=」與數字比較,應該設法轉化成「>=」或「<=」形式 。
double 與 0 比較:

doubel a;

if ( a>-0.000001 && a< 0.000001 )對。

而 if( a == 0 )不對!

2. c/c++的浮點資料型別有float和double兩種。它們在記憶體中是以科學計數法的結果來儲存的。 

型別float大小為4位元組,即32位,記憶體中的儲存方式如下:

符號位(1 bit)

指數(8 bit)

尾數(23 bit)

型別double大小為8位元組,即64位,記憶體布局如下:

符號位(1 bit)

指數(11 bit)

尾數(52 bit)

符號位決定浮點數的正負,0正1負。 

指數和尾數均從浮點數的二進位制科學計數形式中獲取。

3. 關於比較大小

一般情況下用乙個absolute epsilon value來比較(if

(fabs(result - expectedresult) < 0.00001))就夠了。但是在某些對數字精度有特殊要求的domain,比如graphic,需要用更合理的方法。具體,參見引用文獻2.

comparing for equality

comparing with epsilon – absolute error

comparing with epsilon – relative error

1235 比較大小

比較大小 time limit 1000ms memory limit 65536k total submit 145 accepted 51 description 輸入兩個十進位制整數a,b,請判斷它們的大小關係。我們重新定義兩個數的大小比較規則為 誰的二進位制表示中含1的個數多誰大,若含1的個...

shell 比較大小

一 整數比較 eq 等於,如 if a eq b ne 不等於,如 if a ne b gt 大於,如 if a gt b ge 大於等於,如 if a ge b lt 小於,如 if a lt b le 小於等於,如 if a le b 大於 需要雙括號 如 a b 大於等於 需要雙括號 如 a ...

IOS float型別比較大小

int bellowgreenlow 0,bellowgreenhigh 0,bellowyellowhigh 0,aboveyellowhigh 0 int countsum 0 兩個floatleixing 比較時,不能直接相減,當比較是否相等時,應該用兩者之差的絕對值 與精度 相比,如果小於則...