블로그는 나의 힘!
[ Programing ]/Other2013. 5. 22. 00:48
출처 용성경제연구소 | 쇠나뭇군
원문 http://blog.naver.com/zeonsys/70019304203

 

NaN 또는 NAN 또는 nan 이라는 것은 "not a number" 즉, "숫자가 아님"이라는 뜻입니다.

함수 내에서 실수 연산을 하다가 예외적인 상황이 발생하거나 에러가 났을 때 0.0 을 돌려주면, 에러가 났는지 아니면 진짜 0인지 알 수 없어서 모호하고, NULL 을 반환해도 0.0으로 표시되고 해서 곤란한 경우에는 sqrt(-1.0) 을 돌려주면 적당했습니다.

이 경우에도 비주얼C는 NaN을 돌려주지는 않고 -1.#IND00 이라는 값을 반환합니다.

 

이것을 _isnan() 함수는 NaN 으로 인식합니다.

float.h 헤더파일의 _isnan() 함수는, 파라미터로 입력해준 double형의 숫자가 정상적인 숫자이면 0을, NaN 이라면 0이 아닌 숫자를 반환합니다. 이것으로 어떤 결과값이 NaN 인지 아닌지 판단할 수 있습니다.

C의 표준 함수가 아니기에, isnan() 이렇게 하면 안되고, 앞에 언더스코어를 붙여서 _isnan() 이렇게 표현해야 합니다.

 


_isnan() / isnan() 사용 예제 소스


소스 파일명: example.cpp

#include <stdio.h>
#include <float.h> // isnan()
#include <math.h> // sqrt()


int main(void) {
        // 음수의 제곱근은 없기에,
        // 즉, 제곱해서 음수가 되는 숫자는 없기에 NaN 입니다.
        double d = sqrt(-1.0);
        printf("%f\n", d);
        // 출력 결과: -1.#IND00

   if (_isnan(d))
        printf("NaN 입니다\n");
   else
        printf("정상적인 숫자입니다\n");
        // 출력 결과: NaN 입니다

    if( _isnan(2.3) )
        printf("NaN 입니다\n");
    else
        printf("정상적인 숫자입니다\n");
        // 출력 결과: 정상적인 숫자입니다

    return 0;
}

 

 

[출처] [본문스크랩] -1.#IND00|작성자 핵이

 

Posted by Mister_Q