fun main() val dividend = -5 val divisor = 3 println("Remainder (%.rem()): $dividend.rem(divisor)") // Output: -2 println("Modulo (.mod()): $dividend.mod(divisor)") // Output: 1
// Verification of remainder property: // a = (a/b)*b + r // -5 = (-5/3)*3 + (-2) -> -5 = (-1)*3 + (-2) = -5 ✓
Manually fixing a negative remainder:
(-5).rem(3) = -2 2.2 The Modulo Function ( .mod() ) Kotlin defines the Euclidean modulo $r$ such that: $$ a \equiv r \pmodb $$ and: $$ 0 \leq r < |b| $$ Sign rule: $r$ is always non-negative.
// BAD val r = a % b val correct = if (r < 0) r + b else r // GOOD val correct = a.mod(b) | Language | Operator/Function | Behavior | Sign of Result | | :--- | :--- | :--- | :--- | | Kotlin | % / .rem() | Truncated toward zero | Same as dividend | | Kotlin | .mod() | Floored (Euclidean) | Always non‑negative | | Python | % | Floored | Same as divisor | | Java | % | Truncated | Same as dividend | | Java | Math.floorMod() | Floored | Always non‑negative | | C / C++ | % | Truncated (impl‑defined pre‑C++11) | Same as dividend | | JavaScript | % | Truncated | Same as dividend | kotlin mod
(-5).mod(3) = 1 3. Implementation and Behavior Analysis The following Kotlin code demonstrates the functional difference:
Title: The Semantics and Practical Application of the Modulo Operator in Kotlin: Distinguishing rem and mod fun main() val dividend = -5 val divisor
// Verification of modulo property: // -5 ≡ 1 (mod 3) because -5 - 1 = -6, which is divisible by 3.