Signed division. Returns `u64::MAX` on divide-by-zero; `i64::MIN` (as u64) on overflow.
(a: u64, b: u64)
| 148 | |
| 149 | /// Signed division. Returns `u64::MAX` on divide-by-zero; `i64::MIN` (as u64) on overflow. |
| 150 | pub fn div(a: u64, b: u64) -> u64 { |
| 151 | let dividend = a as i64; |
| 152 | let divisor = b as i64; |
| 153 | if divisor == 0 { |
| 154 | u64::MAX |
| 155 | } else if dividend == i64::MIN && divisor == -1 { |
| 156 | i64::MIN as u64 |
| 157 | } else { |
| 158 | dividend.wrapping_div(divisor) as u64 |
| 159 | } |
| 160 | } |
| 161 | |
| 162 | /// Unsigned division. Returns `u64::MAX` on divide-by-zero. |
| 163 | pub fn divu(a: u64, b: u64) -> u64 { |