zoom-cache-0.5.0.0: Data/ZoomCache/Numeric/FloatMinMax.hs
-- | The minimum and maximum positive, finite floats.
module Data.ZoomCache.Numeric.FloatMinMax
( floatMin
, floatMaxDenorm
, floatMinNorm
, floatMax
)
where
import Control.Applicative
import Data.Function
-- | The minimum positive, denormalized float.
floatMin :: RealFloat a => a
floatMin = fix $ do d <- floatDigits
(e,_) <- floatRange
pure $ encodeFloat 1 (e-d)
{-# INLINE floatMin #-}
-- | The maximum denormalized float.
floatMaxDenorm :: RealFloat a => a
floatMaxDenorm = floatMinNorm - floatMin
{-# INLINE floatMaxDenorm #-}
-- | The minimum positive, normalized float.
floatMinNorm :: RealFloat a => a
floatMinNorm = fix $ do (e,_) <- floatRange
pure $ encodeFloat 1 (e-1)
{-# INLINE floatMinNorm #-}
-- | The maximum finite float.
floatMax :: RealFloat a => a
floatMax = fix $ do r <- floatRadix
d <- floatDigits
(_,e) <- floatRange
pure $ encodeFloat (r^d-1) (e-d)
{-# INLINE floatMax #-}