#[inline] #[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] pub fn scalbnf(mut x: f32, mut n: i32) -> f32 { let x1p127 = f32::from_bits(0x7f000000); // 0x1p127f === 2 ^ 127 let x1p_126 = f32::from_bits(0x800000); // 0x1p-126f === 2 ^ -126 let x1p24 = f32::from_bits(0x4b800000); // 0x1p24f === 2 ^ 24 if n > 127 { x *= x1p127; n -= 127; if n > 127 { x *= x1p127; n -= 127; if n > 127 { n = 127; } } } else if n < -126 { x *= x1p_126 * x1p24; n += 126 - 24; if n < -126 { x *= x1p_126 * x1p24; n += 126 - 24; if n < -126 { n = -126; } } } x * f32::from_bits(((0x7f + n) as u32) << 23) }