c++的float(NaN)

來源:互聯網
上載者:User

經常在AS3裡面收穫到NaN,但一直認為C++是弱類型的,只管記憶體,再加上平時都跟uint32打交道比較多,

才會在今天踩到陷阱。碰到一個值為-nan(0x400000)造成的crash.

google了一下收穫到:

http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c

for a float f, f != f will be true only if f is NaN.

對於float類型變數f,f != f 僅在f 是 NaN時成立。

看來判斷float是否為有效值是還得多一個判斷f==f

直接看代碼:

#include <stdio.h>

int main(){
    unsigned int i = 0x400000;
    float f = 0.0f;
    printf("{f:%f,i:%u}\n",f,i);

    *((unsigned int *)&f)=i;
    printf("{f:%f,i:%u}\n",f,i);

    f = 0.0f/0.0f;
    if(f != f)
        printf("f != f,%f,%u\n",f,*((unsigned int *)&f));
    if(f > 0.0f || f == 0.0f || f < 0.0f)
        printf("    f > 0.0f || f == 0.0f || f < 0.0f)\n");
    else
        printf("cool!\n");
    return 0;
}

原來,魚非魚啊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.