@divExact

@divExact

어떤 수를 다른 수로 정확히 나누되, 나머지가 남지 않는 것이 확실한 상황에서 쓰는 나눗셈 함수예요. @divExact는 말 그대로 '정확히 나누는' 연산이라서, 나머지가 발생할 수 있는 상황에는 쓰지 말아야 해요. 몫이 정확히 떨어질 때만 의미가 있고, 그게 아니라면 언짢은 일이 생기니까요. 내가 직접 '이 나눗셈은 정확히 떨어진다'고 보장할 수 있을 때만 사용하는 함수라고 생각하면 좋아요.

출처: Zig Documentation

본문

@divExact(numerator: T, denominator: T) T — 정확히 나누는 함수예요. 호출하는 쪽이 denominator != 0이고 @divTrunc(numerator, denominator) * denominator == numerator임을 보장해야 해요.

간단히 말해, 분모가 0이 아니라는 것과, 나눗셈이 딱 떨어진다는 것(나머지가 0)을 보장해 주는 게 호출자의 몫이라는 뜻이에요. 두 조건이 모두 성립한다고 확신할 때만 호출하세요.

예시를 보면 동작이 명확해져요.

  • @divExact(6, 3) == 2 — 6을 3으로 나누면 정확히 2가 되죠.
  • @divExact(a, b) * b == a — 나눗셈이 정확하면, 다시 곱했을 때 원래 값으로 돌아와요.

나눗셈 결과가 오류 값이 될 수 있는 상황(예를 들어 0으로 나누려 할 때)을 처리하고 싶다면, @import("std").math.divExact를 사용하세요. 이건 오류 코드를 반환할 수 있는 함수라서, 실행 중에 값이 바뀔 수 있는 경우엔 이쪽이 더 안전해요.

더 알아보기