한 칸 전의 번호와 % 결과를 따로 묻습니다
일곱 장의 사진을 0부터 6까지 번호로 관리한다고 합시다. 0번 사진에서 이전 버튼을 누르면 6번을 보여 주고 싶습니다. AI가 (현재 번호 − 1) % 7이라고 코드를 제안했다면 음수 경계에서 직접 시험해야 합니다.
자바스크립트에서 -1 % 7은 -1입니다. 이 값은 원하는 사진 번호 6과 다릅니다. 순환 번호를 구하려는 목적과 언어가 정의한 나머지 연산을 구별해야 어떤 보정이 필요한지 설명할 수 있습니다.
몫을 어느 쪽으로 버리는지가 결과를 정합니다
자바스크립트의 작은 정수 예에서는 n/d의 몫에서 소수 부분을 0 쪽으로 버린 뒤, n에서 d×몫을 뺀 값이 나머지입니다. -8/7은 약 -1.143이므로 0 쪽으로 버린 몫은 -1이고, -8−7×(-1)=-1입니다.
음의 무한대 쪽으로 내림해 몫을 -2로 고르면 남는 값은 6입니다. 두 결과 모두 -8=7×몫+나머지라는 관계를 만족하지만 몫을 고르는 규칙이 다릅니다. 활동에서 몫과 재구성한 n을 함께 보는 이유입니다.
순환 위치는 0부터 d−1까지로 맞춥니다
양의 d에 대해 ((n % d)+d)%d를 쓰면 이 활동 범위의 정수 n을 0부터 d−1까지의 순환 위치로 바꿀 수 있습니다. -1에서는 먼저 나머지 -1을 얻고, 7을 더한 6에 다시 %7을 적용해 6이 됩니다.
8에서는 첫 나머지가 1입니다. 7을 더한 8에 다시 %7을 적용하면 1로 돌아옵니다. 마지막 %가 이미 양수인 나머지를 같은 범위 안에 유지합니다. 활동에서 n을 -8·-1·0·1·8로 바꾸며 원래 나머지와 순환 위치를 비교하세요.
정확히 나누어떨어지는 음수에는 −0도 있습니다
-7 % 7의 결과는 자바스크립트 Number에서 -0입니다. 일반 출력에서는 0처럼 보일 수 있으므로 활동은 Object.is로 구별해 -0으로 표시합니다. 순환 위치 계산 결과는 0입니다.
이 표시는 음수를 나누었을 때의 나머지가 언제나 0보다 작지는 않다는 점을 보여 줍니다. -7과 -1을 따로 시험하면 나누어떨어지는 경우와 남는 경우가 다르다는 것을 확인할 수 있습니다. 이 실험에서는 d를 1~12로 제한해 0으로 나누는 경우를 포함하지 않습니다.
언어와 입력 범위를 함께 기록합니다
계산 모형은 n이 -100~100인 정수이고 d가 1~12인 정수인 범위를 다룹니다. 화면에서는 그중 경계를 비교하기 좋은 값들을 골라 제공합니다. 소수·매우 큰 정수·무한대·BigInt를 모두 검증한 도구가 아닙니다. 다른 언어의 %가 같은 결과를 내는지도 해당 언어 규칙으로 확인해야 합니다.
AI가 만든 순환 코드를 검토할 때는 가운데 값뿐 아니라 첫 칸의 이전, 마지막 칸의 다음, 한 바퀴의 배수도 시험하세요. 원하는 출력 범위와 실제 연산 결과를 나란히 기록하면 오류가 표현의 차이인지 인덱스 계산의 차이인지 분명해집니다.

