@@ -2053,29 +2053,29 @@ macro_rules! float_impl_libm {
20532053macro_rules! integer_decode {
20542054 (
20552055 $func_name: ident,
2056- $T : ty,
2057- $sign_bit_index : expr ,
2058- $fraction_bits_start_index : expr ,
2059- $postshift_mask : expr ,
2056+ $F : ty,
2057+ $size : literal ,
2058+ $fraction_size : literal ,
2059+ $exponent_bias : literal ,
20602060 $fraction_bits_mask: expr,
2061- $exponent_trailing_bit_mask : expr,
2062- $exponent_bias : expr
2061+ $exponent_least_signifigant_bit_mask : expr,
2062+ $postshift_exponent_bits_mask : expr
20632063 ) => {
2064- fn $func_name( f: $T ) -> ( u64 , i16 , i8 ) {
2064+ fn $func_name( f: $F ) -> ( u64 , i16 , i8 ) {
20652065 let bits = f. to_bits( ) ;
20662066
2067- let sign: i8 = if bits >> $sign_bit_index == 0 { 1 } else { -1 } ;
2067+ let sign: i8 = if bits >> $size - 1 == 0 { 1 } else { -1 } ;
20682068
2069- let mantissa = if f == 0 as $T {
2069+ let mantissa = if f == 0 as $F {
20702070 // Zeros and subnormals
20712071 ( bits & $fraction_bits_mask) << 1
20722072 } else {
20732073 // Normals, infinities, and NaN
2074- ( bits & $fraction_bits_mask) | $exponent_trailing_bit_mask
2074+ ( bits & $fraction_bits_mask) | $exponent_least_signifigant_bit_mask
20752075 } ;
20762076
2077- let mut exponent: i16 = ( bits >> $fraction_bits_start_index & $postshift_mask ) as i16 ;
2078- exponent -= $exponent_bias + $fraction_bits_start_index ;
2077+ let mut exponent: i16 = ( bits >> $fraction_size & $postshift_exponent_bits_mask ) as i16 ;
2078+ exponent -= $exponent_bias + $fraction_size ;
20792079
20802080 ( mantissa as u64 , exponent, sign)
20812081 }
@@ -2085,23 +2085,23 @@ macro_rules! integer_decode {
20852085integer_decode ! (
20862086 integer_decode_f32,
20872087 f32 ,
2088- 31 ,
2088+ 32 ,
20892089 23 ,
2090- 0xff ,
2091- 0x7fffff ,
2092- 0x800000 ,
2093- 127
2090+ 127 ,
2091+ 0b0000_0000_0111_1111_1111_1111_1111_1111 ,
2092+ 0b0000_0000_1000_0000_0000_0000_0000_0000 ,
2093+ 0b0000_0000_0000_0000_0000_0000_1111_1111
20942094) ;
20952095
20962096integer_decode ! (
20972097 integer_decode_f64,
20982098 f64 ,
2099- 63 ,
2099+ 64 ,
21002100 52 ,
2101- 0x7ff ,
2102- 0xfffffffffffff_u64 ,
2103- 0x10000000000000_u64 ,
2104- 1023
2101+ 1023 ,
2102+ 0b0000_0000_0000_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111 ,
2103+ 0b0000_0000_0001_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000 ,
2104+ 0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0111_1111_1111
21052105) ;
21062106
21072107#[ cfg( feature = "std" ) ]
0 commit comments