나머지는 산술에서 두 정수의 나눗셈 이후, 온전한 정수 몫으로 표현할 수 없이 남은 양을 가리킨다.
선형 등식의 일반적인 형태는 \( a=q\times d+r\)로 표현할 수 있다.
이 등식에서 \( 0 \leq r < d \)이면 \( q\)는 몫이고 \(r\)은 나머지이다.
0과 자연수 범위에서의 나누기와 나머지는 단순하다.
굳이 엄밀한 정의를 얘기를 하지 않아도 직관적으로 알 수 있다.
그런데, 음수의 영역에 들어가면 얘기가 달라진다.
-5를 3으로 나누었을 때 나머지는 얼마가 되어야 되는 걸까?
-2가 맞을까? 아니면 1이 되어야 되는 걸까?
직관적으로 보면 -2가 맞을 것 같지만, 정의에 따르면 1이 되어야 한다.
음수로 나누는 것을 생각하면 더욱 복잡해진다.
5를 -3으로 나누었을 때 나머지는 어떤 의미를 갖는 값일까?
Microsoft Excel
엑셀에서는 이를 어떻게 처리하는지 확인하기 위해 간단하게 돌려봤다.
엑셀에는 몫을 계산하는 함수(QUOTIENT)와 나머지를 계산하는 함수(MOD)가 각각 있다.
그런데, 이 결과를 다시 역셈하면 뭔가 생각과 다른 결과가 나온다.
QUOTIENT가 아니라 INT(a/b)로 계산할 때만 원래의 값이 나오는 것이다.
C/C++
C언어에서는 어떤 결과가 나오는지 시험해봤다.
#include <stdio.h>
void CalcDivReminder(int a, int b)
{
printf("%2d / %2d = %2d...%2d\n", a, b, a / b, a % b);
}
int main()
{
CalcDivReminder(5, 3);
CalcDivReminder(-5, 3);
CalcDivReminder(5, -3);
CalcDivReminder(-5, -3);
return 0;
}
결과는 아래와 같다.
엑셀과 C언어 간에도 일관된 결과가 나올 수 없을 정도로 이 바닥은 통일된 규칙이 없는 것이다.
5 / 3 = 1... 2
-5 / 3 = -1...-2
5 / -3 = -1... 2
-5 / -3 = 1...-2
덧. VC++와 GCC에서 동일한 결과를 보여주니, 컴파일러 간에 큰 차이는 없다고 봐도 무방함.