第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

浮點比較。

浮點比較。

C++
喵喵時光機 2019-06-24 17:02:33
浮點比較。int main(){     float a = 0.7;     float b = 0.5;     if (a < 0.7)     {        if (b < 0.5) printf("2 are right");        else         printf("1 is right");     }     else printf("0 are right");}我原以為這段代碼的輸出是0 are right..但令我沮喪的是1 is right為什么?
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超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");}

在比較中,浮點數(shù)被提升為雙倍,由于浮點數(shù)比雙面浮點數(shù)低,所以0.7和浮點數(shù)一樣等于0.7倍。在這種情況下,0.7作為浮動變得低于0.7倍,當(dāng)它得到提升。正如克里斯蒂安所說,0.5為2的冪總是被精確地表示出來,所以測試工作就像預(yù)期的那樣:0.5 < 0.5都是假的。

所以要么:

  • 變化

    float

    double

    ,或:
  • 變化

    .7

    .5

    .7f

    .5f,

你就會得到預(yù)期的行為。


查看完整回答
反對 回復(fù) 2019-06-24
?
楊魅力

TA貢獻1811條經(jīng)驗 獲得超6個贊

問題是,您要比較的常量是doublefloat..此外,將常量更改為易于表示的內(nèi)容,例如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");}

產(chǎn)出:

0 are right

這個問題浮動和雙比對最有效的方法包括這個話題。

另外,這篇文章在天鵝座浮點數(shù)比較給我們一些提示:

ieee浮點數(shù)和雙格式的設(shè)計使得這些數(shù)字是“按字典順序排列的”,用ieee Architect william kahan的話來說,意思是“如果兩個相同格式的浮點數(shù)字被排序(例如x<y),那么當(dāng)它們的位被重新解釋為符號大小整數(shù)時,它們的排序方式是相同的?!?/trans>

這意味著,如果我們在內(nèi)存中使用兩個浮點數(shù),將它們的位模式解釋為整數(shù),并將它們進行比較,我們就可以判斷哪個更大,而無需進行浮點比較。在C/C+語言中,這種比較如下所示:

if (*(int*)&f1 < *(int*)&f2)

這種迷人的語法意味著獲取F1的地址,將其視為整數(shù)指針,并取消對它的引用。所有這些指針操作看起來都很昂貴,但是它們基本上都是抵消掉的,只是意味著‘把F1當(dāng)作一個整數(shù)’。由于我們對f2應(yīng)用相同的語法,整行的意思是‘比較f1和f2,使用它們的內(nèi)存中表示形式解釋為整數(shù)而不是浮點數(shù)’。


查看完整回答
反對 回復(fù) 2019-06-24
?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

一般來說,將等式與浮點數(shù)進行比較是一項危險的工作(這實際上是你正在做的事情,就像在>的邊界上進行比較一樣),請記住,在十進制中,某些分?jǐn)?shù)(如1/3)不能精確表示,二進制也是如此,

0.5= 0.1,在浮動或雙倍上都是一樣的。

0.7=0.10110011001100等等,0.7不能完全用二進制表示,您會得到舍入錯誤,浮動和雙值之間可能會有(很小的)不同

請注意,在浮動和雙倍之間,您將減少不同的小數(shù)位數(shù),因此您的結(jié)果不一致。


查看完整回答
反對 回復(fù) 2019-06-24
  • 3 回答
  • 0 關(guān)注
  • 441 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號