• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)]
scalbnf(mut x: f32, mut n: i32) -> f322 pub fn scalbnf(mut x: f32, mut n: i32) -> f32 {
3     let x1p127 = f32::from_bits(0x7f000000); // 0x1p127f === 2 ^ 127
4     let x1p_126 = f32::from_bits(0x800000); // 0x1p-126f === 2 ^ -126
5     let x1p24 = f32::from_bits(0x4b800000); // 0x1p24f === 2 ^ 24
6 
7     if n > 127 {
8         x *= x1p127;
9         n -= 127;
10         if n > 127 {
11             x *= x1p127;
12             n -= 127;
13             if n > 127 {
14                 n = 127;
15             }
16         }
17     } else if n < -126 {
18         x *= x1p_126 * x1p24;
19         n += 126 - 24;
20         if n < -126 {
21             x *= x1p_126 * x1p24;
22             n += 126 - 24;
23             if n < -126 {
24                 n = -126;
25             }
26         }
27     }
28     x * f32::from_bits(((0x7f + n) as u32) << 23)
29 }
30