C語言中浮點型別的比較

2021-10-05 04:48:15 字數 1055 閱讀 3082

我們都知道c中整型資料在計算機裡是以二進位制數儲存的,但是關於浮點數呢比如float a=125.125計算機將其轉化為1111101.001b的二進位制數,可是問題在於計算機根本不認識小數點。

歷史上計算機科學家們曾提出過多種解決方案,最終獲得廣泛應用的是ieee 754標準中的方案,目前最新版的標準ieee std 754-2008。該標準提出數字系統中的浮點數是對數學中的實數(小數)的近似,同時該標準規定表達浮點數的0、1序列被分為三部分(三個域)

詳細參考 浮點數的大小比較為什麼不能用等號?

實際上浮點型資料在計算機中的儲存是一種近似儲存,例如上面提到的a=125.125,在計算機中只是無限逼近,總有誤差小量。

這個誤差小量一般認為exp(-6),所以在比較浮點型別的資料時就要考慮這個小量。

example 兩個浮點型資料float m,float n,假設已經有確切值,現比較大小。

包含#include 「math.h」,呼叫裡面的fabs()函式,這個函式是用來求浮點型資料的絕對值的。

#include

"stdio.h"

#include

"math.h"

intmain

(void

)elseif(

(mfabs

(m-n)

>

1e-6))

//滿足兩個浮點數之差的絕對值大於1e-6,小於成立

elseif(

fabs

(m-n)

<

1e-6

)//滿足兩個浮點數之差的絕對值小於1e-6,等於成立

return0;

}

C語言中的浮點數比較

浮點數分為單精度和雙精度兩種。在記憶體中的儲存方式按照ieee754標準。通常情況下,單精度佔4個位元組,雙精度佔8個位元組。可以使用sizeof驗證一下。include int main 輸出結果為4 8 x和y變數在十進位制數值上是相等的都是0.1。但是0.1用二進位制表示的時候就會丟失精度,只...

C語言中switch case的型別比較機制

看下面的 int func char i int main else 最終輸出的應該是bingo還是miss呢?按照分析,在呼叫func函式中a會被強轉為有符號數,也就是說func函式中i是乙個負數,switch case 在比較時是將switch的變數和case的變數都轉換成int進行比較,負數與...

浮點型大小 C語言中的浮點資料型別

我們來討論一下類似於1.234567,0.00001,這類非整數的資料。我們先試試看,int能不能裝這些資料呢?好像不太行,小數部分都丟失了。那怎麼辦呢?我們需要引入新的型別了。我們把上面的 中int,用float替代。printf dn a 中的佔位符 d,我們知道 d是用於整數的,因此 d肯定是...