이번 글에서는 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 여부를 안전하게 판별해야 할 때 유용하게 사용됩니다. 특히 나눗셈, 제곱근 등의 연산 결과가 유효한 값인지 검증하는 로직에서 활용하면 프로그램의 안정성을 높일 수 있습니다.