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個贊
doublefloat50 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 瀏覽
添加回答
舉報
