C++ remainder() 함수란?
C++의 remainder() 함수는 분자(numerator)를 분모(denominator)로 나눈 부동소수점 나머지를 계산하는 데 사용됩니다. 이 함수는 C 표준 라이브러리의 <cmath> 헤더에 정의되어 있으며, IEEE 754 반올림 규칙을 따른다는 점에서 일반적인 fmod() 함수와 차이가 있습니다.
remainder() 함수의 동작 원리
remainder(x, y) 함수는 다음과 같은 수식으로 결과를 계산합니다.
remainder(x, y) = x – rquote * y
여기서 rquote는 x/y의 값으로, 가장 가까운 정수로 반올림된 값입니다. 몫이 소수점 기준 정확히 0.5일 경우에는 짝수 쪽으로 반올림되는 'round half to even' 방식을 따릅니다.
매개변수와 반환형
이 함수는 두 개의 인자를 받으며, 각 인자는 double, float, long double 타입 중 하나여야 합니다. 반환값은 입력 인자와 동일한 타입의 나머지 값입니다. 첫 번째 인자는 분자(numerator), 두 번째 인자는 분모(denominator)입니다.
예제 코드
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double x = 14.5, y = 4.1;
double res = remainder(x, y);
cout << "Remainder of " << x << "/" << y << " is: " << res << endl;
x = -34.50;
y = 4.0;
res = remainder(x, y);
cout << "Remainder of " << x << "/" << y << " is: " << res << endl;
x = 65.23;
y = 0;
res = remainder(x, y);
cout << "Remainder of " << x << "/" << y << " is: " << res << endl;
return 0;
}
실행 결과
Remainder of 14.5/4.1 is: -1.9 Remainder of -34.5/4 is: 1.5 Remainder of 65.23/0 is: nan
결과 분석
각 출력 결과를 자세히 살펴보면 다음과 같습니다.
- 14.5 / 4.1: 14.5 ÷ 4.1 ≈ 3.54이며, 가장 가까운 정수인 4로 반올림됩니다. 따라서 14.5 − (4 × 4.1) = 14.5 − 16.4 = -1.9가 됩니다.
- -34.5 / 4: -34.5 ÷ 4 = -8.625이며, 가장 가까운 정수인 -9로 반올림됩니다. 따라서 -34.5 − (-9 × 4) = -34.5 + 36 = 1.5가 됩니다.
- 65.23 / 0: 분모가 0이므로 연산이 정의되지 않아 nan(Not a Number)을 반환합니다.
remainder()와 fmod()의 차이점
fmod() 함수 역시 나머지를 계산하지만, 그 결과는 항상 분자와 같은 부호를 가집니다. 반면 remainder()는 결과의 절댓값이 분모의 절반(|y|/2)보다 작거나 같도록 보장합니다. 이러한 특성 덕분에 remainder()는 각도 정규화처럼 주기적인 값의 범위를 좁혀야 하는 수학적 계산에서 더욱 유용하게 활용됩니다.
마무리
C++의 remainder() 함수는 부동소수점 나눗셈에서 가장 가까운 정수 기준의 나머지를 구하는 강력한 도구입니다. 반올림 규칙이 중요한 과학 및 공학 계산에서 특히 유용하며, 분모가 0일 경우 nan을 반환한다는 점을 항상 염두에 두고 예외 처리를 함께 고려하는 것이 좋습니다.