• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // FLOAT TYPE
2 
3 #![doc(hidden)]
4 
5 use crate::num::Float;
6 
7 /// Extended precision floating-point type.
8 ///
9 /// Private implementation, exposed only for testing purposes.
10 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
11 pub struct ExtendedFloat {
12     /// Mantissa for the extended-precision float.
13     pub mant: u64,
14     /// Binary exponent for the extended-precision float.
15     pub exp: i32,
16 }
17 
18 /// Converts an `ExtendedFloat` to the closest machine float type.
19 #[inline(always)]
extended_to_float<F: Float>(x: ExtendedFloat) -> F20 pub fn extended_to_float<F: Float>(x: ExtendedFloat) -> F {
21     let mut word = x.mant;
22     word |= (x.exp as u64) << F::MANTISSA_SIZE;
23     F::from_bits(word)
24 }
25