比較浮點數的時候究竟是怎麼比較的我知道很多語言是根據IEEE754標準 如C或Java

時間 2021-05-31 03:28:39

1樓:行動派

struct float_s ;//IEEE 32 float 記憶體結構

/*1: a > b

*0: a = b

-1: a < b

int float_cmp(struct float_s *a, struct float_s *b)

if (a->e == 0 && b->e == 0 && a->p == 0 && b->p == 0 ) else if(a->s < b->s) else if (a->e < b->e)else if (a->p < b->p) {

return a->s? 1:-1;

return 0;

2樓:

目前c艹標準沒有對這個操作做出界定, 所以是implementation defined, 極端一點:

bool operator== (float, float) 這樣也是符合標準的.

3樓:yan

cpu:什麼float,double,int,那是編譯器的事,到我這裡後,我要保證它們一bit也不差。只要差了那怕一bit,對不起,我不能給你完美!

4樓:仙仙貓

16,777,219.0f == 16,777,221.0f 你也能信~~~浮點數在不精確的情況下可以用,精確的話,要麼abs(a-b)

根編譯器較勁沒意思,c++的版本,編譯器的版本(目標,主機),執行環境,編譯優化,SSE指令,HLSL, 不同的作業系統,不同的硬體系統,弄明白有意義嘛? 就像是操作符的優先順序,還是老老實實的加括號。。

5樓:烏合之眾

寫乙個兩個float型別的數相等比較的函式boolf(

floata,

floatb)

以下皆為在x86_64環境下

使用VS2017開啟全域性優化後,彙編如下

fPROC

ucomiss

xmm0

,xmm1

jpSHORT

$LN3@f

jneSHORT

$LN3@f

moval,1

ret0

$LN3@f

:xoral,

alret0f

ENDP

CLang5.0 -O3編譯如下

cmpeqss xmm0, xmm1

movd eax, xmm0

and eax, 1

retgcc7.2編譯如下

ucomiss xmm0, xmm1

mov edx, 0

setnp al

cmovne eax, edx

retICC編譯如下

cmpeqss xmm0, xmm1

movd eax, xmm0

neg eax

retZapCC編譯如下

cmpeqss xmm0, xmm1

movd eax, xmm0

and eax, 1

ret可見在這些編譯器的實現中,並沒有對浮點數的判等比較做多餘的工作。至於處理器有沒有做,我覺得應該也是沒有的吧。

6樓:

@SuperSodaSea 答主說的是對的。我自己犯糊塗了,其實就是當double 型別的時候1.1+1.

2的二進位制與2.3的二進位制碰巧一致,而float型別的時候則不一致得到的布林表示式也是false。

7樓:SuperSodaSea

題主的0100000000010011001100110011001101000000000100110011001100110100是用 float 運算的結果。事實上,如果採用 float 進行運算的話(1.1f + 1.

2f == 2.3f)就很可能會得到 false。而如果使用 double 計算的話(1.

1 + 1.2 == 2.3),結果是:

這兩個二進位制序列是完全相等的,會得到 true。(當然這並不是說兩個浮點數比較就是直接比較二進位制位,特殊的情況會有特殊的處理,例如NaN。)

說白了這也只是湊巧,這兩個數在 float 下相加精度不夠,而在 double 下恰好能夠得到預料中的結果而已。換乙個數結果就不一樣了。

* 不確保所有環境下結果一致

大學究竟是怎麼樣子的?是比較勢利的嗎

Clliew 大學是很美好的,就看你遇到什麼人,想成為什麼樣的人。我自己是那種比較安靜的人,大學裡遇到了特別要好的一群室友,有激勵我努力學習的學霸室友,也有性格開朗帶我放開膽子玩的逗比室友,當然也有特別會照顧人的好好室友。大學四年,我們幹了好多傻事,也留下了好多美好的回憶。如今,大家都在不同的城市生...

茶 究竟是怎麼分類的?

設計太抖 目前中國的茶葉種類分為六大類,也就是常說的紅 黃 白 綠 黑 青 烏龍茶 六種。大致可以理解為按照發酵程度進行劃分的,不發酵茶 綠茶 輕發酵茶 白茶 黃茶 半發酵茶 青茶 全發酵茶 紅茶 後發酵茶 黑茶 普洱熟茶 長安東市 茶的分類,按各種不同標準,可有不同的區分法。然最一般也最常使用的,...

人究竟是怎麼來的?

主神大大 讀過的書就一定是對的?我認為讀的越多,越覺得人類誕生沒有這麼簡單,相反,不知道演化論被多種考古證據推翻的才應該去多讀點書!首先,相信人類適用於演化論的請解釋摩訶婆羅多中的聖戰為何與核戰情形描寫相同?在附近一公里外發現黃色玻璃,此為核彈引爆才能瞬間融化沙子所產生的黃色玻璃,死者都與經歷核爆相...