Title: The Semantics and Practical Application of the Modulo Operator in Kotlin: Distinguishing rem and mod
// 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
Manually fixing a negative remainder:
// Verification of remainder property: // a = (a/b)*b + r // -5 = (-5/3)*3 + (-2) -> -5 = (-1)*3 + (-2) = -5 ✓ Title: The Semantics and Practical Application of the
// Verification of modulo property: // -5 ≡ 1 (mod 3) because -5 - 1 = -6, which is divisible by 3. which is divisible by 3.