컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monday, February 26, 2007

C언어] NaN 출력, 실수 연산 에러 판단 함수 _isnan(); isnan


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 이라는 값을 실제로 사용한 케이스: ▶▶ C언어] 표준 편차 구하기/계산 함수 소스; Standard Deviation Function




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top