JavaScript/자바스크립트는 왜 그 모양일까?

[JS] 자바스크립트의 mod 연산, modulo vs remainder

개발자엄지희 2023. 7. 3. 16:58
반응형

"자바스크립트는 왜 그럴까?"를 읽던 중, 이번에는 modulo 연산과 remainder 연산이 다르다는 문구가 나왔다.
자바스크립트는 왜 이렇게 날 미궁에 빠지게 하는 걸까...

자바스크립트는 왜 그럴까? p.19

(아래 글을 참고했음을 밝힙니다.)

 

[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 이 된다.

python의 modulo 연산자


2. 나머지 연산자 (remainder, 나머지 연산)

자바스크립트에서 나머지의 결과는 피제수(나눠지는 수, 여기선  -3 )을 따르기 때문에   -3 % 5 = -3 이 된다.
왜냐하면,   -3 = 5 * 0 - 3  으로 표현할 수 있기 때문이다.

자바스크립트에서 mod 연산의 결과가 양수가 나오도록 코드를 구성하려면
  (( n % m ) + m ) % m  과 같은 방식으로 해서 결과를 양수로 이끌어내줘야 한다!

자바스크립트의 remainder 연산자

그렇다면 modulo와 remainder, 이 둘의 차이는 어디서 기인하는 걸까?


모듈로 연산자 (modulo) 와 나머지 연산자 (remainder) 의 차이


자바스크립트는 왜 그럴까? p.19

"자바스크립트는 왜 그따구일까 그럴까?" 책에서도 나와있듯이,
모듈로 연산자(modulo)의 나머지 결과값은 제수(나누는 수)의 부호를 따른다.
반면, 나머지 연산자(remainder)의 나머지 결과값은 피제수(나눠지는 수)의 부호를 따른다.

예를 들어, -3 나누기 5의 결과값을 구할 경우,
모듈로 연산자의 결과는 나누는 수인 5의 부호를 따르고, 나머지 연산자의 결과는 나눠지는 수인 -3의 부호를 따른다.

 

구분 모듈로 연산자 (modulo) 나머지 연산자 (remainder)
정의 나눗셈의 나머지를 반환,
제수(나누는 수)의 부호를 따름
나눗셈의 나머지를 반환,
피제수(나눠지는 수)의 부호를 따름
나머지 연산의 결과값 (r) r은 0보다 크거나 양수 -
사용 분야 주로 숫자의 순환을 나타내거나
숫자를 일정 범위 내로 제한하는 데 사용
수학적 계산이나 알고리즘에 사용
Ex) 나눗셈을 통한 나머지 계산 등
반응형