diff --git a/traits/src/float.rs b/traits/src/float.rs index 6b052c3..757be87 100644 --- a/traits/src/float.rs +++ b/traits/src/float.rs @@ -2,6 +2,9 @@ use std::mem; use std::ops::Neg; use std::num::FpCategory; +// Used for default implementation of `epsilon` +use std::f32; + use {Num, NumCast}; // FIXME: these doctests aren't actually helpful, because they're using and @@ -99,7 +102,14 @@ pub trait Float /// /// assert_eq!(x, f64::EPSILON); /// ``` - fn epsilon() -> Self; + /// + /// # Panics + /// + /// The default implementation will panic if `f32::EPSILON` cannot + /// be cast to `Self`. + fn epsilon() -> Self { + Self::from(f32::EPSILON).expect("Unable to cast from f32::EPSILON") + } /// Returns the largest finite value that this type can represent. ///