3 回答

TA貢獻1817條經驗 獲得超6個贊
int main(){ float a = 0.7, b = 0.5; // These are FLOATS if(a < .7) // This is a DOUBLE { if(b < .5) // This is a DOUBLE printf("2 are right"); else printf("1 is right"); } else printf("0 are right");}
0.5 < 0.5
變化 float
到 double
,或: 變化 .7
和 .5
到 .7f
和 .5f
,

TA貢獻1811條經驗 獲得超6個贊
double
float
5
0 is right
main(){ float a=0.25,b=0.5; if(a<.25) { if(b<.5) printf("2 are right"); else printf("1 is right"); }elseprintf("0 are right");}
0 are right
ieee浮點數和雙格式的設計使得這些數字是“按字典順序排列的”,用ieee Architect william kahan的話來說,意思是“如果兩個相同格式的浮點數字被排序(例如x<y),那么當它們的位被重新解釋為符號大小整數時,它們的排序方式是相同的。”
這意味著,如果我們在內存中使用兩個浮點數,將它們的位模式解釋為整數,并將它們進行比較,我們就可以判斷哪個更大,而無需進行浮點比較。在C/C+語言中,這種比較如下所示:
if (*(int*)&f1 < *(int*)&f2)
這種迷人的語法意味著獲取F1的地址,將其視為整數指針,并取消對它的引用。所有這些指針操作看起來都很昂貴,但是它們基本上都是抵消掉的,只是意味著‘把F1當作一個整數’。由于我們對f2應用相同的語法,整行的意思是‘比較f1和f2,使用它們的內存中表示形式解釋為整數而不是浮點數’。

TA貢獻2065條經驗 獲得超14個贊
0.5= 0.1
0.7=0.10110011001100
- 3 回答
- 0 關注
- 446 瀏覽
添加回答
舉報