c + + 의 float (NaN)

항상 AS3 에서 NaN 을 수확 하지만 C + + 는 약 한 유형 이 라 고 생각 하고 메모리 만 관리 하 는 데다 가 평소에 uint 32 와 접촉 하 는 것 이 많 습 니 다.
오늘 함정 을 밟 은 거 야.값 이 - nan (0x 400000) 인 crash 에 부 딪 혔 습 니 다.
구 글 이 수확 한 것 은:
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}",f,i);    *((unsigned int *)&f)=i;    printf("{f:%f,i:%u}",f,i);    f = 0.0f/0.0f;    if(f != f)        printf("f != f,%f,%u",f,*((unsigned int *)&f));    if(f > 0.0f || f == 0.0f || f < 0.0f)        printf("    f > 0.0f || f == 0.0f || f < 0.0f)");    else        printf("cool!");    return 0;}
c + + 의 nan 을 어떻게 내 는 지 보충 해 주세요.
#include 
#include 

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

좋은 웹페이지 즐겨찾기