module ConstMath.Rules (
rationalToFloat
, rationalToDouble
) where
import GHC.Float
import GHC.Real
rationalToFloat :: Rational -> Float
rationalToFloat (n:%0)
| n == 0 = 0/0
| n < 0 = (1)/0
| otherwise = 1/0
rationalToFloat (n:%d)
| n == 0 = encodeFloat 0 0
| n < 0 = (fromRat'' minEx mantDigs (n) d)
| otherwise = fromRat'' minEx mantDigs n d
where
minEx = fst (floatRange (0::Float))
mantDigs = floatDigits (0 :: Float)
rationalToDouble :: Rational -> Double
rationalToDouble (n:%0)
| n == 0 = 0/0
| n < 0 = (1)/0
| otherwise = 1/0
rationalToDouble (n:%d)
| n == 0 = encodeFloat 0 0
| n < 0 = (fromRat'' minEx mantDigs (n) d)
| otherwise = fromRat'' minEx mantDigs n d
where
minEx = fst (floatRange (0 :: Double))
mantDigs = floatDigits (0 :: Double)