2 - Copyright (C) 2009-2010 Nick Bowler.
4 - License BSD2: 2-clause BSD license. See LICENSE for full terms.
5 - This is free software: you are free to change and redistribute it.
6 - There is NO WARRANTY, to the extent permitted by law.
9 -- | Top level module for alternative floating point support.
10 module Data
.Floating
(
12 module Data
.Floating
.Types
.Core
,
16 import Prelude
hiding (RealFloat
(..), RealFrac
(..), Double, Float)
17 import Data
.Floating
.Types
.Core
hiding (Double, Float, FloatConvert
)
18 import Data
.Floating
.Types
.Double
19 import Data
.Floating
.Types
.Float
20 import Data
.Floating
.Environment
21 import Data
.Floating
.Types
.CMath
25 isInfinite :: PrimFloat a
=> a
-> Bool
26 isInfinite = (== FPInfinite
) . classify
28 isNaN :: PrimFloat a
=> a
-> Bool
29 isNaN = (== FPNaN
) . classify
31 isNormal
:: PrimFloat a
=> a
-> Bool
32 isNormal
= (== FPNormal
) . classify
34 isSubNormal
:: PrimFloat a
=> a
-> Bool
35 isSubNormal
= (== FPSubNormal
) . classify
37 isFinite
:: PrimFloat a
=> a
-> Bool
38 isFinite
= not . liftM2 (||
) isInfinite isNaN
40 isNegativeZero :: PrimFloat a
=> a
-> Bool
41 isNegativeZero = liftM2 (&&) ((== FPZero
) . classify
) ((== (-1)) . signum)
43 -- | @fquotRem x y@ computes the remainder and integral quotient upon division
44 -- of x by y. The result is (x-n*y, n), where n is the value x/y rounded to
45 -- the nearest integer.
46 fquotRem
:: RealFloat a
=> a
-> a
-> (a
, a
)
47 fquotRem x y
= (frem x y
, nearbyint
(x
/y
))