ilogbf.rs - source
Description: Source of the Rust file `/Users/erlendbasso/.cargo/registry/src/github.com-1ecc6299db9ec823/libm-0.2.6/src/math/ilogbf.rs`.
Keywords: rust, rustlang, rust-lang

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    const FP_ILOGBNAN: i32 = -1 - 0x7fffffff;
    const FP_ILOGB0: i32 = FP_ILOGBNAN;

    #[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)]
    pub fn ilogbf(x: f32) -> i32 {
        let mut i = x.to_bits();
        let e = ((i >> 23) & 0xff) as i32;

        if e == 0 {
            i <<= 9;
            if i == 0 {
                force_eval!(0.0 / 0.0);
                return FP_ILOGB0;
            }
            /* subnormal x */
            let mut e = -0x7f;
            while (i >> 31) == 0 {
                e -= 1;
                i <<= 1;
            }
            e
        } else if e == 0xff {
            force_eval!(0.0 / 0.0);
            if (i << 9) != 0 {
                FP_ILOGBNAN
            } else {
                i32::max_value()
            }
        } else {
            e - 0x7f
        }
    }