use crate::CarrierUint;
pub(crate) fn prefer_round_down(significand: CarrierUint) -> bool {
significand % 2 != 0
}
pub(crate) fn remove_trailing_zeros(significand: &mut CarrierUint, exponent: &mut i32) {
let mut r = rotr64(significand.wrapping_mul(28999941890838049), 8);
let mut b = r < 184467440738;
let mut s = i32::from(b);
*significand = if b { r } else { *significand };
r = rotr64(significand.wrapping_mul(182622766329724561), 4);
b = r < 1844674407370956;
s = s * 2 + i32::from(b);
*significand = if b { r } else { *significand };
r = rotr64(significand.wrapping_mul(10330176681277348905), 2);
b = r < 184467440737095517;
s = s * 2 + i32::from(b);
*significand = if b { r } else { *significand };
r = rotr64(significand.wrapping_mul(14757395258967641293), 1);
b = r < 1844674407370955162;
s = s * 2 + i32::from(b);
*significand = if b { r } else { *significand };
*exponent += s;
}
const fn rotr64(n: CarrierUint, r: u32) -> CarrierUint {
let r = r & 63;
(n >> r) | (n << ((64 - r) & 63))
}