pub trait FloatConstants {
fn radix() -> u32;
fn mantissa_digits() -> u32;
fn digits() -> u32;
fn epsilon() -> Self;
fn min_positive() -> Self;
fn min_exp() -> i32;
fn max_exp() -> i32;
fn min_10_exp() -> i32;
fn max_10_exp() -> i32;
fn nan() -> Self;
fn infinity() -> Self;
fn neg_infinity() -> Self;
}
macro_rules! impl_float_constants {
($($t:ty),*) => {
$(impl FloatConstants for $t {
#[inline] fn radix() -> u32 { Self::RADIX }
#[inline] fn mantissa_digits() -> u32 { Self::MANTISSA_DIGITS }
#[inline] fn digits() -> u32 { Self::DIGITS }
#[inline] fn epsilon() -> Self { Self::EPSILON }
#[inline] fn min_positive() -> Self { Self::MIN_POSITIVE }
#[inline] fn min_exp() -> i32 { Self::MIN_EXP }
#[inline] fn max_exp() -> i32 { Self::MAX_EXP }
#[inline] fn min_10_exp() -> i32 { Self::MIN_10_EXP }
#[inline] fn max_10_exp() -> i32 { Self::MAX_10_EXP }
#[inline] fn nan() -> Self { Self::NAN }
#[inline] fn infinity() -> Self { Self::INFINITY }
#[inline] fn neg_infinity() -> Self { Self::NEG_INFINITY }
})*
};
}
impl_float_constants!(f32, f64);