module Data.Floating (
module Data.Floating.Classes,
Double, Float,
module Data.Floating,
toFloating
) where
import Prelude hiding (RealFloat(..), RealFrac(..), Double, Float)
import Data.Floating.Classes
import Data.Floating.Instances
import Data.Floating.Types
import Data.Floating.Types.Double
import Data.Floating.Types.Float
import Data.Floating.Environment
import Control.Monad
isInfinite :: PrimFloat a => a -> Bool
isInfinite = (== FPInfinite) . classify
isNaN :: PrimFloat a => a -> Bool
isNaN = (== FPNaN) . classify
isNormal :: PrimFloat a => a -> Bool
isNormal = (== FPNormal) . classify
isSubNormal :: PrimFloat a => a -> Bool
isSubNormal = (== FPSubNormal) . classify
isFinite :: PrimFloat a => a -> Bool
isFinite = not . liftM2 (||) isInfinite isNaN
isNegativeZero :: PrimFloat a => a -> Bool
isNegativeZero = liftM2 (&&) ((== FPZero) . classify) ((== (1)) . signum)
fquotRem :: RealFloat a => a -> a -> (a, a)
fquotRem x y = (frem x y, nearbyint (x/y))