remquof(mut x: f32, mut y: f32) -> (f32, i32)1 pub fn remquof(mut x: f32, mut y: f32) -> (f32, i32) {
2     let ux: u32 = x.to_bits();
3     let mut uy: u32 = y.to_bits();
4     let mut ex = ((ux >> 23) & 0xff) as i32;
5     let mut ey = ((uy >> 23) & 0xff) as i32;
6     let sx = (ux >> 31) != 0;
7     let sy = (uy >> 31) != 0;
8     let mut q: u32;
9     let mut i: u32;
10     let mut uxi: u32 = ux;
11 
12     if (uy << 1) == 0 || y.is_nan() || ex == 0xff {
13         return ((x * y) / (x * y), 0);
14     }
15     if (ux << 1) == 0 {
16         return (x, 0);
17     }
18 
19     /* normalize x and y */
20     if ex == 0 {
21         i = uxi << 9;
22         while (i >> 31) == 0 {
23             ex -= 1;
24             i <<= 1;
25         }
26         uxi <<= -ex + 1;
27     } else {
28         uxi &= (!0) >> 9;
29         uxi |= 1 << 23;
30     }
31     if ey == 0 {
32         i = uy << 9;
33         while (i >> 31) == 0 {
34             ey -= 1;
35             i <<= 1;
36         }
37         uy <<= -ey + 1;
38     } else {
39         uy &= (!0) >> 9;
40         uy |= 1 << 23;
41     }
42 
43     q = 0;
44     if ex + 1 != ey {
45         if ex < ey {
46             return (x, 0);
47         }
48         /* x mod y */
49         while ex > ey {
50             i = uxi.wrapping_sub(uy);
51             if (i >> 31) == 0 {
52                 uxi = i;
53                 q += 1;
54             }
55             uxi <<= 1;
56             q <<= 1;
57             ex -= 1;
58         }
59         i = uxi.wrapping_sub(uy);
60         if (i >> 31) == 0 {
61             uxi = i;
62             q += 1;
63         }
64         if uxi == 0 {
65             ex = -30;
66         } else {
67             while (uxi >> 23) == 0 {
68                 uxi <<= 1;
69                 ex -= 1;
70             }
71         }
72     }
73 
74     /* scale result and decide between |x| and |x|-|y| */
75     if ex > 0 {
76         uxi -= 1 << 23;
77         uxi |= (ex as u32) << 23;
78     } else {
79         uxi >>= -ex + 1;
80     }
81     x = f32::from_bits(uxi);
82     if sy {
83         y = -y;
84     }
85     if ex == ey || (ex + 1 == ey && (2.0 * x > y || (2.0 * x == y && (q % 2) != 0))) {
86         x -= y;
87         q += 1;
88     }
89     q &= 0x7fffffff;
90     let quo = if sx ^ sy { -(q as i32) } else { q as i32 };
91     if sx {
92         (-x, quo)
93     } else {
94         (x, quo)
95     }
96 }
97