evobench_tools/utillib/
integers.rs1pub fn rounding_integer_division(a: usize, b: usize) -> usize {
3 let a = u128::try_from(a).expect("always works");
4 let b = u128::try_from(b).expect("always works");
5 let usize_max = u128::try_from(usize::MAX).expect("always works");
6
7 let r = (a * usize_max + (b >> 1) * usize_max) / (b * usize_max);
8 usize::try_from(r).expect("always fits")
9}
10
11#[test]
12fn t_rounding_integer_division() {
13 let t = rounding_integer_division;
14 assert_eq!(t(33126, 1), 33126); assert_eq!(t(33126, 2), 16563); assert_eq!(t(33126, 3), 11042); assert_eq!(t(33126, 4), 8282); assert_eq!(t(33126, 9464), 4); assert_eq!(t(33126, 9465), 3); assert_eq!(t(33126, 12000), 3); assert_eq!(t(33126, 13563), 2); assert_eq!(t(33126, 16563), 2); assert_eq!(t(33126, 22083), 2); assert_eq!(t(33126, 22084), 2); assert_eq!(t(33126, 22085), 1); assert_eq!(t(33126, 33126), 1); }