SM/REM — 대칭 나눗셈
SM/REM — 대칭 나눗셈 (몫과 나머지)
SM/REM(s-m-slash-rem)은 d1을 n1로 나누어 대칭 나머지 n2와 대칭 몫 n3를 구하는 코어 단어예요.
본문
스택 효과
( d1 n1 -- n2 n3 )
설명
d1을 n1로 나누어 대칭(symmetric) 나머지 n2와 대칭 몫 n3를 구해요. n1이 0이거나 몫이 단일 셀에 맞지 않으면 애매한 조건이 존재해요. n3는 나머지를 버린 몫으로, 그 절대값은 |n1|로 나눈 |d1|의 절대 몫보다 작지 않아요.
참조 (See)
- 3.2.2.1 Integer division(정수 나눗셈)
- 6.1.1561 FM/MOD
- 6.1.2370 UM/MOD
- A.6.1.2214 SM/REM
합리성 (Rationale)
FM/MOD 아래의 나눗셈에 대한 앞선 논의를 참조하세요. SM/REM은 대칭 나눗셈 원시 연산으로, 프로그램이 다음 대칭 나눗셈 연산자들을 정의할 수 있게 해요:
: / ( n1 n2 -- n3 ) >R S>D R> SM/REM SWAP DROP ;
: MOD ( n1 n2 -- n3 ) >R S>D R> SM/REM DROP ;
테스트 (Testing)
T{ 0 1 SM/REM -> 0 1 TS.REM }T
T{ 1 1 SM/REM -> 1 1 TS.REM }T
T{ 2 1 SM/REM -> 2 1 TS.REM }T
T{ -1 1 SM/REM -> -1 1 TS.REM }T
T{ -2 1 SM/REM -> -2 1 TS.REM }T
T{ 0 -1 SM/REM -> 0 -1 TS.REM }T
T{ 1 -1 SM/REM -> 1 -1 TS.REM }T
T{ 2 -1 SM/REM -> 2 -1 TS.REM }T
T{ -1 -1 SM/REM -> -1 -1 TS.REM }T
T{ -2 -1 SM/REM -> -2 -1 TS.REM }T
T{ 2 2 SM/REM -> 2 2 TS.REM }T
T{ -1 -1 SM/REM -> -1 -1 TS.REM }T
T{ -2 -2 SM/REM -> -2 -2 TS.REM }T
T{ 7 3 SM/REM -> 7 3 TS.REM }T
T{ 7 -3 SM/REM -> 7 -3 TS.REM }T
T{ -7 3 SM/REM -> -7 3 TS.REM }T
T{ -7 -3 SM/REM -> -7 -3 TS.REM }T
T{ MAX-INT 1 SM/REM -> MAX-INT 1 TS.REM }T
T{ MIN-INT 1 SM/REM -> MIN-INT 1 TS.REM }T
T{ MAX-INT MAX-INT SM/REM -> MAX-INT MAX-INT TS.REM }T
T{ MIN-INT MIN-INT SM/REM -> MIN-INT MIN-INT TS.REM }T
(위 테스트는 표준 테스트 스위트의 TS.REM 보조 단어를 사용해요.)