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

C++에서 NaN(Not a Number)이란? 개념과 예제로 쉽게 이해하기

NaNNot a Number의 약자로, 정의되지 않았거나 부동소수점 방식으로 표현할 수 없는 값을 나타내는 특수한 값입니다. 주로 수학적으로 유효하지 않은 연산의 결과로 발생하며, 대표적인 예로 음수의 제곱근을 구하는 경우나 0을 0으로 나누는(0/0) 연산이 있습니다.

NaN이 발생하는 대표적인 경우

  • 음수에 대한 제곱근 계산 (예: sqrt(-5))
  • 0 ÷ 0 과 같은 불확정 형태의 나눗셈
  • 무한대에서 무한대를 빼는 연산 (∞ - ∞)
  • 0에 무한대를 곱하는 연산 (0 × ∞)

예제 코드

다음은 C++에서 음수의 제곱근을 구했을 때 NaN이 출력되는 예제입니다.

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    cout << "-5의 제곱근: " << sqrt(-5) << endl;
    return 0;
}

실행 결과

-5의 제곱근: nan

NaN 여부 확인하기

NaN은 자기 자신과도 같지 않다는(NaN == NaN → false) 특징이 있기 때문에, 일반적인 비교 연산으로는 판별할 수 없습니다. 이때 <cmath> 헤더에 포함된 isnan() 함수를 사용하면 값이 NaN인지 간단하게 확인할 수 있습니다.

double result = sqrt(-5);

if (isnan(result)) {
    cout << "결과는 NaN입니다." << endl;
} else {
    cout << "정상적인 값입니다." << endl;
}

이처럼 NaN은 프로그램 실행 중 오류를 의미하는 것은 아니지만, 수학적으로 유효하지 않은 연산이 수행되었음을 알려주는 중요한 신호이므로, 부동소수점 연산을 다룰 때 반드시 염두에 두어야 합니다.