现在的位置: 首页 > 综合 > 正文

c++的float(NaN)

2012年06月04日 ⁄ 综合 ⁄ 共 648字 ⁄ 字号 评论关闭

经常在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;
}

原来,鱼非鱼啊

抱歉!评论已关闭.