module Nums.Fractionals
(towardZero
,towardInf
,towardNegInf
,awayFromZero
,nearestTowardZero
,nearestTowardInf
,nearestTowardNegInf
,nearestAwayFromZero
,nearestBanker
,isHalf
)
where
towardZero :: (Integral b, RealFrac a) => a -> b
towardZero = truncate
towardInf :: (Integral b, RealFrac a) => a -> b
towardInf = ceiling
towardNegInf :: (Integral b, RealFrac a) => a -> b
towardNegInf = floor
awayFromZero :: (Integral b, RealFrac a) => a -> b
awayFromZero v = if v > 0 then ceiling v else floor v
nearestTowardZero :: (Integral b, RealFrac a) => a -> b
nearestTowardZero v = if isHalf v then towardZero v else round v
nearestTowardInf :: (Integral b, RealFrac a) => a -> b
nearestTowardInf v = if isHalf v then towardInf v else round v
nearestTowardNegInf :: (Integral b, RealFrac a) => a -> b
nearestTowardNegInf v = if isHalf v then towardNegInf v else round v
nearestAwayFromZero :: (Integral b, RealFrac a) => a -> b
nearestAwayFromZero v = if isHalf v then awayFromZero v else round v
nearestBanker :: (Integral b, RealFrac a) => a -> b
nearestBanker = round
isHalf :: RealFrac a => a -> Bool
isHalf v = v fromInteger (towardNegInf v) == 0.5