c++的float(NaN)

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



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;

}

补充一下c++的nan怎么出

#include <limits>
#include <assert.h>

void foo( double a, double b )
{
    assert( a != b );
}

int main()
{
    typedef std::numeric_limits<double> Info;
    double const nan1 = Info::quiet_NaN();
    double const nan2 = Info::quiet_NaN();
    foo( nan1, nan2 );
}


原来,鱼非鱼啊
原文链接: https://www.cnblogs.com/linbc/archive/2013/01/18/2866276.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/75980

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午5:14
下一篇 2023年2月9日 下午5:15

相关推荐