module Data.Number.Extra 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
fi :: (Integral a, Num b) => a -> b
fi = fromIntegral
isHalf :: RealFrac a => a -> Bool
isHalf v = v fromInteger (towardNegInf v) == 0.5
int :: (Integral a, Num b) => a -> b
int = fromIntegral