2 - Copyright (C) 2009 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 -- | Generic classes for floating point types. The interface is loosely based
10 -- off of the C math library.
11 module Data
.Floating
.Classes
where
13 import Prelude
hiding (Floating
(..), RealFloat
(..), RealFrac
(..), Ord
(..))
17 -- | Classification of floating point values.
18 data FPClassification
= FPInfinite | FPNaN | FPNormal | FPSubNormal | FPZero
19 deriving (Show, Read, Eq
, Enum
, Bounded
)
21 -- | Class for types which can be rounded to integers.
23 -- Minimal complete definition: 'toIntegral' and 'round'.
24 class (Fractional a
, Poset a
) => Roundable a
where
25 -- | Discards the fractional component from a value. Results in 'Nothing'
26 -- if the result cannot be represented as an integer, such as if the input
27 -- is infinite or NaN.
28 toIntegral
:: Integral b
=> a
-> Maybe b
36 |
otherwise = round $ x
- fromRational (1%2
)
39 |
otherwise = round $ x
+ fromRational (1%2
)
45 -- | Class for floating point types (real or complex-valued).
47 -- Minimal complete definition: everything.
48 class Fractional a
=> Floating a
where
66 -- | Class for real-valued floating point types.
68 -- Minimal complete definition: all except 'pi', 'infinity' and 'nan'.
69 class Floating a
=> RealFloat a
where
70 fma
:: a
-> a
-> a
-> a
71 copysign
:: a
-> a
-> a
72 nextafter
:: a
-> a
-> a
76 fquotRem
:: a
-> a
-> (Int, a
)
89 classify
:: a
-> FPClassification