@divFloor — 바닥 나눗셈
@divFloor — 바닥 나눗셈
정수 나눗셈을 하다 보면 결과가 어느 쪽으로 내림되는지가 늘 중요해져요. @divFloor는 음의 무한대 방향으로 내림(바닥 floor)하는 나눗셈 빌트인입니다.
본문
시그니처는 이렇게 생겼어요.
@divFloor(numerator: T, denominator: T) T
@divFloor는 바닥 나눗셈(floored division)을 수행합니다. 결과를 음의 무한대 쪽으로 내림해요. 부호 없는 정수(unsigned integers)라면 일반 나눗셈과 같은 결과를 줍니다.
다만 호출하는 쪽에서 몇 가지를 보장해야 해요. denominator != 0이어야 하고, 다음 조건은 성립하지 않아야 합니다.
!(@typeInfo(T) == .int and T.is_signed and numerator == std.math.minInt(T) and denominator == -1)
사용 예시를 보면 동작이 바로 와닿죠.
@divFloor(-5, 3) == -2
(@divFloor(a, b) * b) + @mod(a, b) == a
첫 번째처럼 음수를 나눌 때 일반 정수 나눗셈(-1)과 달리 -2가 나오는 것이 바닥 나눗셈의 특징입니다. 두 번째는 @divFloor와 @mod가 서로를 보완해 원래 값 a로 되돌아온다는 관계를 보여줘요.
만약 에러 코드를 돌려받을 수 있는 함수가 필요하다면, @import("std").math.divFloor를 쓰면 됩니다. 이 빌트인은 그러한 오류 처리를 하지 않아요.