Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ isnormal() 함수 – 숫자가 정규 값인지 확인하는 방법

C++ isnormal() 함수란?

이번 글에서는 C++의 isnormal() 함수에 대해 자세히 알아보겠습니다. 이 함수는 <cmath> 헤더 파일에 정의되어 있으며, 주어진 부동 소수점 수가 정규 값(normal value)인지 여부를 판별하는 데 사용됩니다.

정규 값이 아닌(non-normal) 숫자에는 다음과 같은 것들이 포함됩니다.

  • 0 (영)
  • 무한대(Infinity)
  • NAN (Not a Number)

isnormal() 함수의 동작 방식

isnormal() 함수는 float, double, long double 타입의 값을 인자로 받습니다. 인자로 전달된 값이 정규 값이면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

여기서 '정규 값'이란 부동 소수점 표준(IEEE 754)에서 비정규(subnormal) 수, 0, 무한대, NaN에 해당하지 않는 일반적인 부동 소수점 수를 의미합니다.

예제 코드

#include<iostream>
#include<cmath>
using namespace std;
int main() {
   cout << "isnormal(" << 5.23 << "): " << isnormal(5.23) << endl;
   cout << "isnormal(" << 0.00 << "): " << isnormal(0.00) << endl;
   cout << "isnormal(" << 2.0/0.0 << "): " << isnormal(2.0/0.0) << endl;
}

실행 결과

isnormal(5.23): 1
isnormal(0): 0
isnormal(inf): 0

결과 분석

위 예제의 실행 결과를 살펴보면 다음과 같은 사실을 확인할 수 있습니다.

  • 5.23은 일반적인 정규 부동 소수점 값이므로 1이 반환됩니다.
  • 0.00은 정규 값이 아니므로 0이 반환됩니다.
  • 2.0/0.0의 결과는 무한대(inf)이므로 역시 0이 반환됩니다.

이처럼 isnormal() 함수는 수치 연산 결과의 유효성을 검사하거나, 비정상적인 부동 소수점 값을 사전에 필터링해야 하는 상황에서 유용하게 활용할 수 있습니다.