compiler_builtins/math/libm_math/
modff.rs1#[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)]
2pub fn modff(x: f32) -> (f32, f32) {
3 let rv2: f32;
4 let mut u: u32 = x.to_bits();
5 let mask: u32;
6 let e = (((u >> 23) & 0xff) as i32) - 0x7f;
7
8 if e >= 23 {
10 rv2 = x;
11 if e == 0x80 && (u << 9) != 0 {
12 return (x, rv2);
14 }
15 u &= 0x80000000;
16 return (f32::from_bits(u), rv2);
17 }
18 if e < 0 {
20 u &= 0x80000000;
21 rv2 = f32::from_bits(u);
22 return (x, rv2);
23 }
24
25 mask = 0x007fffff >> e;
26 if (u & mask) == 0 {
27 rv2 = x;
28 u &= 0x80000000;
29 return (f32::from_bits(u), rv2);
30 }
31 u &= !mask;
32 rv2 = f32::from_bits(u);
33 return (x - rv2, rv2);
34}