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 함수와 isnan은 math.h 헤더 파일에 정의 및 선언되어 있습니다).