libm/math/
frexpf.rs

1pub fn frexpf(x: f32) -> (f32, i32) {
2    let mut y = x.to_bits();
3    let ee: i32 = ((y >> 23) & 0xff) as i32;
4
5    if ee == 0 {
6        if x != 0.0 {
7            let x1p64 = f32::from_bits(0x5f800000);
8            let (x, e) = frexpf(x * x1p64);
9            return (x, e - 64);
10        } else {
11            return (x, 0);
12        }
13    } else if ee == 0xff {
14        return (x, 0);
15    }
16
17    let e = ee - 0x7e;
18    y &= 0x807fffff;
19    y |= 0x3f000000;
20    (f32::from_bits(y), e)
21}