Double 與 Float 的值的比較結果

2021-06-22 22:14:10 字數 791 閱讀 6623

首先看geeksforgeeks上的兩個程式:

程式1:

#includeint main()

程式2:

#includeint main()

程式1輸出是:else if, 而程式2,輸出是:if

為什麼呢?

這是因為double和float的精度不一樣,如果小數轉換為二進位制的時候是無限迴圈的話,那麼就會出現對比值不一樣,比如0.1,否則就可以比較float和double,結果值相等,比如0.5.

這就需要應用到小數轉換為二進位制的知識了,所謂的乘2取整法。

如0.1轉換為二進位制為:

0.1 * 2 = 0.2 ---- 整數為0,故取該位為0

0.2*2 = 0.4 -----整數為0,繼續取0

0.4*2 = 0.8 -----整數為零,取零

0.8*2 = 1.6-----整數為1,取1

0.6*2 = 1.2----取1

0.2*2 = 0.4---取零,和前面迴圈了。

故此0.1(base 10) == 0.00011 0011 0011...(0011為無限迴圈數字值)

這樣的數取不同精度,那麼肯定會導致其值不一樣的了。

故此:(float)0.1 != double(0.1)

但是0.5(base 10) = 0.1(base 2),沒有無限迴圈數字

故此:(float)0.5 == double(0.5)

參考:

float 與double 的區別

float 與double 都是浮點數,浮點數有兩種表示形式 1 十進位制小數形式。例如 0.123,123.0,等,注意 必須有小數點。2 指數形式。如123e3或123e3都代表123 10 3。注意e或e之前必須有數字,而且e後面的指數必須為整數。乙個浮點數有多種指數表示形式,例如123.45...

double與float的區別

單精度浮點數在機內佔4個位元組,用32位二進位制描述。雙精度浮點數在機內佔8個位元組,用64位二進位制描述。浮點數在機內用指數型式表示,分解為 數符,尾數,指數符,指數四部分。數符佔1位二進位制,表示數的正負。指數符佔1位二進位制,表示指數的正負。尾數表示浮點數有效數字,0.x,但不存開頭的0和點 ...

關於float與double區別

problem a 啤酒和飲料 time limit 1 sec memory limit 128 mb submit 175 solved 29 submit status web board description 啤酒每罐2.3元,飲料每罐1.9元。小明買了若干啤酒和飲料,一共花了s元。我們還...