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

C 언어에서 무한대를 검사하는 방법은 다음과 같습니다.

float_infinity.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 헤더 파일에 정의 및 선언되어 있습니다).

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

float_nan.c

#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(Not a Number)이라고 하며 isnan 함수로 검사할 수 있습니다(sqrt 함수와 isnanmath.h 헤더 파일에 정의 및 선언되어 있습니다).