如何判斷兩個浮點數是否相等

2021-10-04 13:17:23 字數 1055 閱讀 2367

眾所周知,在c/c++語言中,兩個整形型別的數字是可以直接用==進行比較的,而兩個浮點型別的資料是不能直接用 = = 符號進行比較的。

不能直接進行比較的原因是:

1.0000001 和 1.0 這兩個數在絕大多數的情況下,認為它們是相等的,所以經常能看到如下的 c 或者 c++ ** if(fabs(a-b)<=eps_0) ,一般地,eps_0設定為很小的數,比如1.0e-6 或者 1.0e-7,直觀地來講,就是說當兩個數之間的距離(稱為絕對誤差)很小很小的時候,我們就認為它們是相等的。

浮點型資料在記憶體中的儲存

ieee754規定,對於32位浮點數,最高位1位是符號位s,接著的8位是指數e,最後的23位為有效數字m;對於64位浮點數,最高位1位是符號位s,接著11位是指數e,剩下的52位為有效數字m,存m只存小數點後面的位。針對e來說,e為乙個無符號整數,這意味著如果e為8位,他的取值範圍為0-255,如果e為11位,他的取值範圍為0-2047,但是我們知道,科學計數法中的e是可以出現負數的,,所以ieee754規定,存入記憶體時,e的真實值,必須加上乙個中間數,對於8位的e中間數為127,對於11位的e,中間數為1023.

float 和double型別的區別

float32位中,1位符號位,8位指數字,23位尾數字

double64位中,1位符號位,11位指數字,52位尾數字

一般float型只能精確到小數後六位(即1e-6),將float型資料的絕對值與1e-6比較,來判斷是否相等

eg:

if

(fabs

(a-b)

<

1e-6

)else

fabs()是對浮點數求絕對值,abs()是對整數求絕對值。

fabs()的函式原型為:

double

fabs

(double x )

;標頭檔案為#include

fabs returns the absolute value of its argument. there is no error return

.

1203 判斷浮點數是否相等

題目描述 description 給出兩個浮點數,請你判斷這兩個浮點數是否相等 輸入描述 input description 輸入僅一行,包含兩個浮點數 輸出描述 output description 輸出僅一行,如果相等則輸出yes,否則輸出no。樣例輸入 sample input 2.98000...

Java中比較兩個浮點數是否相等

public class test public static void isequaloffloat float a,float b 執行結果 使用 符號比較是否相等 true 使用 math.abs 方法比較是否相等 false 使用 math.abs 方法比較是否相等 比較寬容的限制 true...

c 如何判斷兩個浮點數相等或者大小問題

sap的面試題之一 如何判斷兩個浮點數是否相等 例1 a 1.000001 b 1.0兩個數,一般情況下會認為兩者相等。一般我們會認為寫出 例2 a 1000.0001 b 1000.000時,顯然按照上面的程式,兩者並不相等,但是按照相對誤差 1000.001 1000.00 1000.000 1...