Search code examples
haskellfloating-pointconstants

Haskell minimum/maximum Double Constant


Is there any way in Haskell to get the constant that is the largest and smallest possible positive rational number greater than zero that can be represented by doubles?


Solution

  • maxNonInfiniteFloat :: RealFloat a => a -> a
    maxNonInfiniteFloat a = encodeFloat m n where
        b = floatRadix a
        e = floatDigits a
        (_, e') = floatRange a
        m = b ^ e - 1
        n = e' - e
    
    minPositiveFloat :: RealFloat a => a -> a
    minPositiveFloat a = encodeFloat 1 $ fst (floatRange a) - floatDigits a