SM/REM — 대칭 나눗셈

SM/REM — 대칭 나눗셈 (몫과 나머지)

SM/REM(s-m-slash-rem)은 d1n1로 나누어 대칭 나머지 n2와 대칭 몫 n3를 구하는 코어 단어예요.

출처: SM/REM — Forth 2012 Standard

본문

스택 효과

( d1 n1 -- n2 n3 )

설명

d1n1로 나누어 대칭(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 보조 단어를 사용해요.)

더 알아보기 (Learn more)

출처: SM/REM — Forth 2012 Standard