Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 복소수에 모듈로(%) 연산은 어떻게 작동할까?

파이썬에서 몫 연산자(//)나머지 연산자(%)는 일반적으로 정수나 실수에 사용되지만, 복소수(complex number)에 대해서는 버전에 따라 지원 여부가 다릅니다.

Python 3.x에서는 복소수에 대해 이 두 연산자를 사용하는 것이 허용되지 않습니다. 반면, 구버전인 Python 2.7.x에서는 복소수에 대한 이러한 연산이 정의되어 있어 결과를 반환합니다.

Python 3에서의 동작

Python 3에서 복소수에 나머지 연산자를 적용하면 TypeError가 발생합니다.

>>> x = 9 + 2j
>>> y = 2 + 1j
>>> x % y
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    x % y
TypeError: can't mod complex numbers.

Python 2.7에서의 동작

같은 코드를 Python 2.7에서 실행하면 다음과 같이 나머지 값이 계산됩니다.

>>> x = 9 + 2j
>>> y = 2 + 1j
>>> x % y
(1-2j)

복소수 모듈로 연산의 원리

Python 2.7에서 복소수 피연산자에 대한 나머지(modulus)는 다음 수식으로 정의됩니다. 즉, 원래 값을 몫(floor division)과 분모(y)의 곱으로 뺀 나머지 부분이 결과가 됩니다.

>>> x - (x // y) * y
(1-2j)

위 식을 보면 x % y의 결과인 (1-2j)가 그대로 재현되는 것을 확인할 수 있습니다. 참고로 Python 3에서 복소수의 크기(절댓값)가 필요하다면 내장 함수 abs()를 사용하거나, cmath 모듈을 활용하는 것이 올바른 방법입니다.