반응형

나머지[각주:1]는 산술에서 두 정수의 나눗셈 이후, 온전한 정수 몫으로 표현할 수 없이 남은 양을 가리킨다.

선형 등식의 일반적인 형태는 \( 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에서 동일한 결과를 보여주니, 컴파일러 간에 큰 차이는 없다고 봐도 무방함.

 

 

  1. 영어: remainder [본문으로]
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band