Skip to content

78. 무한대와 NaN


1. 키워드

  • 무한대(Infinity)
  • NaN(Not a Number)


2. 실수의 무한대와 숫자가 아닌 값 검사

  • C에서 무한대를 검사하는 방법은 다음과 같다.


#include <stdio.h>
#include <float.h> // 실수 자료형의 양수 최솟값, 최댓값이 정의된 헤더 파일
#include <math.h>  // 무한대 INFINITY가 정의된 헤더 파일

int main()
{
    float num1 = FLT_MAX;
    float num2;

    num1 = num1 * 1000.0f; // float 타입의 양수 최댓값에 1000을 곱하여 무한대가 됨

    if (num1 == INFINITY) // INFINITY와 비교하여 값이 무한대인지 검사
        printf("infinity\n");

    if (isinf(num1)) // isinf를 사용하여 값이 무한대인지 검사
        printf("infinity\n");

    num2 = 0.0f;
    num1 = 1.0f / num2; // 실수를 0으로 나누면 무한대

    if (isinf(num1)) // isinf를 사용하여 값이 무한대인지 검사
        printf("infinity\n");

    return 0;
}

// infinity
// infinity
// infinity


  • 변수를 INFINITY와 비교하거나 isinf 함수를 사용하여 값이 무한대인지 검사할 수 있다.
  • INFINITY 값과 isinf 함수는 math.h 헤더 파일에 정의 및 선언되어 있다.


  • 무한대는 아니지만 실수가 아닐 때도 있다.


#include <stdio.h>
#include <math.h> // sqrt와 isnan이 정의 및 선언된 헤더 파일

int main()
{
    float num1;

    num1 = sqrt(-1.0f); // -1의 제곱근은 실수로 표현할 수 없음

    if (isnan(num1)) // 숫자가 아닌 값인지 검사
        printf("nan\n");

    return 0;
}

// nan


  • sqrt-1의 제곱근을 구하면 허수 i이다.
  • 따라서 실수로는 표현할 수 없는 수가 된다.
  • 이렇게 숫자가 아닌 값을 표현할 때는 NaN이라고 하며 isnan 함수로 검사할 수 있다.
  • sqrt 함수와 isnanmath.h 헤더 파일에 정의 및 선언되어 있다.

References