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

C++ isunordered() 함수 완벽 정리: NaN 여부 확인 방법

이번 글에서는 C++의 isunordered() 함수에 대해 자세히 알아보겠습니다. 함수의 문법, 동작 원리, 그리고 반환값까지 예제 코드와 함께 살펴봅니다.

isunordered() 함수는 C++의 <cmath> 헤더 파일에 내장된 함수로, 두 개의 부동소수점 수 중 하나라도 NaN(Not a Number)인지를 검사합니다. 두 값 중 하나 또는 둘 다 NaN이라면 1(true)을 반환하고, 그렇지 않으면 0(false)을 반환합니다.

문법

bool isunordered(float n1, float n2);

또는

bool isunordered(double n1, double n2);

또는

bool isunordered(long double n1, long double n2);

함수는 비교할 두 개의 부동소수점 변수를 인자로 받으며, 이 값들 중 하나라도 NaN인지 여부를 확인합니다.

반환값

이 함수는 불리언(Boolean) 값을 반환합니다. 즉, 조건이 참이면 1, 거짓이면 0을 리턴합니다.

예제 1: NaN이 포함된 경우

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    float a = -1.0;
    float c = sqrt(-1.0);
    cout << c;
    // c의 결과 출력
    cout << "\n" << isunordered(c, 0.0); // 둘 중 하나가 NaN인지 검사
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

-nan
1

sqrt(-1.0)은 음수의 제곱근을 구하는 연산이므로 결과가 NaN이 됩니다. 따라서 isunordered(c, 0.0)은 첫 번째 인자가 NaN임을 감지하여 1을 반환합니다.

예제 2: NaN이 없는 경우

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    cout << isunordered(0.0, -1.0);
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

0

두 인자 모두 유효한 숫자이므로 NaN이 아니며, 함수는 0(false)을 반환합니다.

정리

isunordered() 함수는 부동소수점 연산에서 NaN 여부를 안전하게 판별해야 할 때 유용하게 사용됩니다. 특히 나눗셈, 제곱근 등의 연산 결과가 유효한 값인지 검증하는 로직에서 활용하면 프로그램의 안정성을 높일 수 있습니다.