나머지는 산술에서 두 정수의 나눗셈 이후, 온전한 정수 몫으로 표현할 수 없이 남은 양을 가리킨다. 1
선형 등식의 일반적인 형태는 \( a=q\times d+r\)로 표현할 수 있다.
이 등식에서 \( 0 \leq r < d \)이면 \( q\)는 몫이고 \(r\)은 나머지이다.
0과 자연수 범위에서의 나누기와 나머지는 단순하다.
굳이 엄밀한 정의를 얘기를 하지 않아도 직관적으로 알 수 있다.
그런데, 음수의 영역에 들어가면 얘기가 달라진다.
-5를 3으로 나누었을 때 나머지는 얼마가 되어야 되는 걸까?
-2가 맞을까? 아니면 1이 되어야 되는 걸까?
직관적으로 보면 -2가 맞을 것 같지만, 정의에 따르면 1이 되어야 한다.
음수로 나누는 것을 생각하면 더욱 복잡해진다.
5를 -3으로 나누었을 때 나머지는 어떤 의미를 갖는 값일까?
엑셀에서는 이를 어떻게 처리하는지 확인하기 위해 간단하게 돌려봤다.
엑셀에는 몫을 계산하는 함수(QUOTIENT)와 나머지를 계산하는 함수(MOD)가 각각 있다.
그런데, 이 결과를 다시 역셈하면 뭔가 생각과 다른 결과가 나온다.
QUOTIENT가 아니라 INT(a/b)로 계산할 때만 원래의 값이 나오는 것이다.
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에서 동일한 결과를 보여주니, 컴파일러 간에 큰 차이는 없다고 봐도 무방함.
C언어에서의 HEX2DEC() 함수 최적화 (0) | 2021.01.16 |
---|---|
음수의 나누기/나머지는 대체 어떻게 해야 되는 걸까? (0) | 2020.11.15 |
e의 연분수 전개시 특정 수렴값의 분자의 합 (0) | 2020.11.08 |
제곱근의 연분수 전개시 반복되는 숫자가 홀수 개인 경우는? (0) | 2020.11.08 |
endianness 삽질기 (2) | 2020.10.17 |
n 제곱의 자릿수가 n인 경우의 개수는? (0) | 2020.03.28 |
본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.