眾所周知,在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:
fabs()是對浮點數求絕對值,abs()是對整數求絕對值。if
(fabs
(a-b)
<
1e-6
)else
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...