zoukankan      html  css  js  c++  java
  • 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 <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;
    }

    补充一下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 );
    }


    原来,鱼非鱼啊

  • 相关阅读:
    HTML标签大全
    PHP实现QQ第三方登录代码
    php链接access并查询列出
    php连接Access数据库
    获取文件信息
    动态网页转伪静态
    asp读取指定目录下的文件名
    如何设置VBA代码的密码?如何取消VBA代码的密码?
    ol序号并在序号加背景色
    免费ASP空间
  • 原文地址:https://www.cnblogs.com/linbc/p/2866276.html
Copyright © 2011-2022 走看看