Truncating integer division safely [ref]
Problem
- Divide
-7 by 3, truncating toward zero using integer arithmetic.
- Divide
7 by -3 the same way.
- Observe why floor division of
-7 by 3 differs.
- Clamp signed 32-bit division of
-2147483648 by -1.
Python solution
a, b = -7, 3
sign = -1 if (a < 0) != (b < 0) else 1
sign * (abs(a) // abs(b)) # -2
a, b = 7, -3
sign = -1 if (a < 0) != (b < 0) else 1
sign * (abs(a) // abs(b)) # -2
-7 // 3 # -3
INT_MIN, INT_MAX = -(1 << 31), (1 << 31) - 1
a, b = INT_MIN, -1
result = INT_MAX if a == INT_MIN and b == -1 else (
(-1 if (a < 0) != (b < 0) else 1) * (abs(a) // abs(b))
)
result # 2147483647
# Avoid int(a / b) for large integers: / converts to floating point.
Links