packages feed

brush-strokes-0.1.0.0: src/lib/Math/Epsilon.hs

{-# LANGUAGE ScopedTypeVariables #-}

module Math.Epsilon
  ( epsilon, nearZero )
  where

--------------------------------------------------------------------------------

{-# SPECIALISE INLINE epsilon @Float  #-}
{-# SPECIALISE INLINE epsilon @Double #-}
epsilon :: forall r. RealFloat r => r
epsilon = encodeFloat 1 ( 1 - floatDigits ( 0 :: r ) )

nearZero :: RealFloat r => r -> Bool
nearZero x = abs x < epsilon