pub fn modff(x: f32) -> (f32, f32) { let rv2: f32; let mut u: u32 = x.to_bits(); let mask: u32; let e = ((u >> 23 & 0xff) as i32) - 0x7f; /* no fractional part */ if e >= 23 { rv2 = x; if e == 0x80 && (u << 9) != 0 { /* nan */ return (x, rv2); } u &= 0x80000000; return (f32::from_bits(u), rv2); } /* no integral part */ if e < 0 { u &= 0x80000000; rv2 = f32::from_bits(u); return (x, rv2); } mask = 0x007fffff >> e; if (u & mask) == 0 { rv2 = x; u &= 0x80000000; return (f32::from_bits(u), rv2); } u &= !mask; rv2 = f32::from_bits(u); return (x - rv2, rv2); }