pub fn floor_div<T>(numerator: T, denom: T) -> Twhere T: Copy + Div<Output = T> + Rem<Output = T> + Sub<Output = T>,
divide two values and round down to the nearest integer.