C와 Python에서의 음수 나눗셈에 관하여

2020. 5. 5. 22:26Study

C에서는 -7 / 3 == -2이고, -7 % 3 == -1이다.
반면 Python에서는 -7 // 3 == -3이고, -7 % 3 == 2이다.

 

일반적으로 대수에서는 유클리드 나눗셈(Python 방식)을 따르는데, C와 Python에서 각기 다른 연산 방식을 따르는 이유가 궁금해졌다.

 

C와 같이 나눗셈을 구현하려면 다음과 같은 추가적인 과정을 거쳐야한다. (둘 중 하나)

  • shift right 연산 이후에 shift 되어 사라진 부분에 1이 하나라도 있으면 shift 이후의 결과값에 1을 더한다.
  • shift right k 연산(>> k) 이전에 k개 자리만큼 1을 더해준다.

 

Python에서는 아무래도 Python 용도의 특성상 modulo 연산을 대수에서 사용하는 것과 동일하게 구현을 한 것 같다. 반면에 C에서는 remainder를 살리는 것이 더 자연스러워 보이기도하고 포트란에서 구현된 방식을 그대로 따랐기 때문에 저렇게 구현을 한 것이 아닐까 추측을 해본다.

 

관련 discussion 글: https://stackoverflow.com/questions/1907565/c-and-python-different-behaviour-of-the-modulo-operation