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;
}
'[ Programing ] > Other' 카테고리의 다른 글
Visual Studio 2010에서 크래시 메모리 덤프 파일 열기 (0) | 2013.10.17 |
---|---|
자주 가봐야할 사이트 (프로그래밍) (0) | 2013.05.22 |
비주얼 스튜디오 클래스 다이어그램 (0) | 2013.05.21 |
마비노기 영웅전 코딩 관련 (0) | 2013.05.21 |
반디 캡쳐 라이브러리 (0) | 2013.05.21 |