pub trait Float:
Sized
+ Copy
+ PartialEq
+ PartialOrd
+ Send
+ Sync
+ Add<Output = Self>
+ AddAssign
+ Div<Output = Self>
+ DivAssign
+ Mul<Output = Self>
+ MulAssign
+ Rem<Output = Self>
+ RemAssign
+ Sub<Output = Self>
+ SubAssign
+ Neg<Output = Self> {
Show 21 associated constants and 8 methods
const MAX_DIGITS: usize;
const SIGN_MASK: u64;
const EXPONENT_MASK: u64;
const HIDDEN_BIT_MASK: u64;
const MANTISSA_MASK: u64;
const MANTISSA_SIZE: i32;
const EXPONENT_BIAS: i32;
const DENORMAL_EXPONENT: i32;
const MAX_EXPONENT: i32;
const CARRY_MASK: u64;
const MIN_EXPONENT_ROUND_TO_EVEN: i32;
const MAX_EXPONENT_ROUND_TO_EVEN: i32;
const MINIMUM_EXPONENT: i32;
const SMALLEST_POWER_OF_TEN: i32;
const LARGEST_POWER_OF_TEN: i32;
const MIN_EXPONENT_FAST_PATH: i32;
const MAX_EXPONENT_FAST_PATH: i32;
const MAX_EXPONENT_DISGUISED_FAST_PATH: i32;
const INVALID_FP: i32 = -32_768i32;
const MAX_MANTISSA_FAST_PATH: u64 = _;
const INFINITE_POWER: i32 = _;
// Required methods
fn from_u64(u: u64) -> Self;
fn from_bits(u: u64) -> Self;
fn to_bits(self) -> u64;
unsafe fn pow_fast_path(exponent: usize) -> Self;
// Provided methods
unsafe fn int_pow_fast_path(exponent: usize, radix: u32) -> u64 { ... }
fn is_denormal(self) -> bool { ... }
fn exponent(self) -> i32 { ... }
fn mantissa(self) -> u64 { ... }
}
Expand description
Generic floating-point type, to be used in generic code for parsing.
Although the trait is part of the public API, the trait provides methods and constants that are effectively non-public: they may be removed at any time without any breaking changes.
Required Associated Constants§
Sourceconst MAX_DIGITS: usize
const MAX_DIGITS: usize
Maximum number of digits that can contribute in the mantissa.
We can exactly represent a float in radix b
from radix 2 if
b
is divisible by 2. This function calculates the exact number of
digits required to exactly represent that float.
According to the “Handbook of Floating Point Arithmetic”, for IEEE754, with emin being the min exponent, p2 being the precision, and b being the radix, the number of digits follows as:
−emin + p2 + ⌊(emin + 1) log(2, b) − log(1 − 2^(−p2), b)⌋
For f32, this follows as: emin = -126 p2 = 24
For f64, this follows as: emin = -1022 p2 = 53
In Python:
-emin + p2 + math.floor((emin+1)*math.log(2, b) - math.log(1-2**(-p2), b))
This was used to calculate the maximum number of digits for [2, 36].
Sourceconst EXPONENT_MASK: u64
const EXPONENT_MASK: u64
Bitmask for the exponent, including the hidden bit.
Sourceconst HIDDEN_BIT_MASK: u64
const HIDDEN_BIT_MASK: u64
Bitmask for the hidden bit in exponent, which is an implicit 1 in the fraction.
Sourceconst MANTISSA_MASK: u64
const MANTISSA_MASK: u64
Bitmask for the mantissa (fraction), excluding the hidden bit.
Sourceconst MANTISSA_SIZE: i32
const MANTISSA_SIZE: i32
Size of the significand (mantissa) without hidden bit.
Sourceconst EXPONENT_BIAS: i32
const EXPONENT_BIAS: i32
Bias of the exponet
Sourceconst DENORMAL_EXPONENT: i32
const DENORMAL_EXPONENT: i32
Exponent portion of a denormal float.
Sourceconst MAX_EXPONENT: i32
const MAX_EXPONENT: i32
Maximum exponent value in float.
Sourceconst CARRY_MASK: u64
const CARRY_MASK: u64
Mask to determine if a full-carry occurred (1 in bit above hidden bit).
const MIN_EXPONENT_ROUND_TO_EVEN: i32
const MAX_EXPONENT_ROUND_TO_EVEN: i32
Sourceconst MINIMUM_EXPONENT: i32
const MINIMUM_EXPONENT: i32
Minimum normal exponent value -(1 << (EXPONENT_SIZE - 1)) + 1
.
Sourceconst SMALLEST_POWER_OF_TEN: i32
const SMALLEST_POWER_OF_TEN: i32
Smallest decimal exponent for a non-zero value.
Sourceconst LARGEST_POWER_OF_TEN: i32
const LARGEST_POWER_OF_TEN: i32
Largest decimal exponent for a non-infinite value.
Sourceconst MIN_EXPONENT_FAST_PATH: i32
const MIN_EXPONENT_FAST_PATH: i32
Minimum exponent that for a fast path case, or -⌊(MANTISSA_SIZE+1)/log2(10)⌋
Sourceconst MAX_EXPONENT_FAST_PATH: i32
const MAX_EXPONENT_FAST_PATH: i32
Maximum exponent that for a fast path case, or ⌊(MANTISSA_SIZE+1)/log2(5)⌋
Sourceconst MAX_EXPONENT_DISGUISED_FAST_PATH: i32
const MAX_EXPONENT_DISGUISED_FAST_PATH: i32
Maximum exponent that can be represented for a disguised-fast path case.
This is MAX_EXPONENT_FAST_PATH + ⌊(MANTISSA_SIZE+1)/log2(10)⌋
Provided Associated Constants§
Sourceconst INVALID_FP: i32 = -32_768i32
const INVALID_FP: i32 = -32_768i32
Bias for marking an invalid extended float.
const MAX_MANTISSA_FAST_PATH: u64 = _
const INFINITE_POWER: i32 = _
Required Methods§
fn from_bits(u: u64) -> Self
fn to_bits(self) -> u64
Sourceunsafe fn pow_fast_path(exponent: usize) -> Self
unsafe fn pow_fast_path(exponent: usize) -> Self
Get a small power-of-radix for fast-path multiplication.
§Safety
Safe as long as the exponent is smaller than the table size.
Provided Methods§
Sourceunsafe fn int_pow_fast_path(exponent: usize, radix: u32) -> u64
unsafe fn int_pow_fast_path(exponent: usize, radix: u32) -> u64
Get a small, integral power-of-radix for fast-path multiplication.
§Safety
Safe as long as the exponent is smaller than the table size.
Sourcefn is_denormal(self) -> bool
fn is_denormal(self) -> bool
Returns true if the float is a denormal.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.