[JS] 자바스크립트의 mod 연산, modulo vs remainder
"자바스크립트는 왜 그럴까?"를 읽던 중, 이번에는 modulo 연산과 remainder 연산이 다르다는 문구가 나왔다.
자바스크립트는 왜 이렇게 날 미궁에 빠지게 하는 걸까...
(아래 글을 참고했음을 밝힙니다.)
[JavaScript] mod 연산
자바스크립트의 mod 연산
velog.io
모듈로 연산자 (modulo) 와 나머지 연산자 (remainder)
1. 모듈로 연산자 (modulo, mod, 나머지 연산)
어떤 한 수를 다른 수로 나누었을 때 나머지를 구하는 연산이다.
어떤 수 n 을 m 으로 나누었을 때 나머지 r 의 범위는 주로 아래와 같다.
0 <= r <= m - 1
일반적인 mod 연산자에서, -3 % 5 = 2 이다. 왜냐하면, -3 = 5 * (-1) + 2 로 표현할 수 있기 때문이다.
하지만, 자바스크립트에서는 -3 % 5 = -3 이 된다.
2. 나머지 연산자 (remainder, 나머지 연산)
자바스크립트에서 나머지의 결과는 피제수(나눠지는 수, 여기선 -3 )을 따르기 때문에 -3 % 5 = -3 이 된다.
왜냐하면, -3 = 5 * 0 - 3 으로 표현할 수 있기 때문이다.
자바스크립트에서 mod 연산의 결과가 양수가 나오도록 코드를 구성하려면
(( n % m ) + m ) % m 과 같은 방식으로 해서 결과를 양수로 이끌어내줘야 한다!
그렇다면 modulo와 remainder, 이 둘의 차이는 어디서 기인하는 걸까?
모듈로 연산자 (modulo) 와 나머지 연산자 (remainder) 의 차이
"자바스크립트는 왜 그따구일까 그럴까?" 책에서도 나와있듯이,
모듈로 연산자(modulo)의 나머지 결과값은 제수(나누는 수)의 부호를 따른다.
반면, 나머지 연산자(remainder)의 나머지 결과값은 피제수(나눠지는 수)의 부호를 따른다.
예를 들어, -3 나누기 5의 결과값을 구할 경우,
모듈로 연산자의 결과는 나누는 수인 5의 부호를 따르고, 나머지 연산자의 결과는 나눠지는 수인 -3의 부호를 따른다.
구분 | 모듈로 연산자 (modulo) | 나머지 연산자 (remainder) |
정의 | 나눗셈의 나머지를 반환, 제수(나누는 수)의 부호를 따름 |
나눗셈의 나머지를 반환, 피제수(나눠지는 수)의 부호를 따름 |
나머지 연산의 결과값 (r) | r은 0보다 크거나 양수 | - |
사용 분야 | 주로 숫자의 순환을 나타내거나 숫자를 일정 범위 내로 제한하는 데 사용 |
수학적 계산이나 알고리즘에 사용 Ex) 나눗셈을 통한 나머지 계산 등 |