{-# LANGUAGE ScopedTypeVariables #-}
module Numeric.Units.Dimensional.Float
(
isDenormalized, isInfinite, isNaN, isNegativeZero
, isFiniteNumber, scaleFloat
, infinity, minNormal, maxFinite, epsilon, nan
, predIEEE, succIEEE, bisectIEEE, copySign
, nanWithPayload, nanPayload, F.maxNaNPayload
, identicalIEEE, minNum, maxNum, minNaN, maxNaN
)
where
import Control.Applicative
import Data.Word (Word64)
import Prelude (RealFloat)
import qualified Prelude as P
import Numeric.IEEE (IEEE)
import qualified Numeric.IEEE as F
import Numeric.Units.Dimensional.Internal (liftQ, liftQ2)
import Numeric.Units.Dimensional.Prelude hiding (RealFloat(..))
import Numeric.Units.Dimensional.Coercion
isDenormalized :: RealFloat a => Quantity d a -> Bool
isDenormalized :: Quantity d a -> Bool
isDenormalized = a -> Bool
forall a. RealFloat a => a -> Bool
P.isDenormalized (a -> Bool) -> (Quantity d a -> a) -> Quantity d a -> Bool
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Quantity d a -> a
forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
unQuantity
isFiniteNumber :: RealFloat a => Quantity d a -> Bool
isFiniteNumber :: Quantity d a -> Bool
isFiniteNumber = Bool -> Bool
not (Bool -> Bool) -> (Quantity d a -> Bool) -> Quantity d a -> Bool
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Bool -> Bool -> Bool)
-> (Quantity d a -> Bool)
-> (Quantity d a -> Bool)
-> Quantity d a
-> Bool
forall (f :: Type -> Type) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Bool -> Bool -> Bool
(||) Quantity d a -> Bool
forall a (d :: Dimension). RealFloat a => Quantity d a -> Bool
isNaN Quantity d a -> Bool
forall a (d :: Dimension). RealFloat a => Quantity d a -> Bool
isInfinite
isInfinite :: RealFloat a => Quantity d a -> Bool
isInfinite :: Quantity d a -> Bool
isInfinite = a -> Bool
forall a. RealFloat a => a -> Bool
P.isInfinite (a -> Bool) -> (Quantity d a -> a) -> Quantity d a -> Bool
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Quantity d a -> a
forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
unQuantity
isNaN :: RealFloat a => Quantity d a -> Bool
isNaN :: Quantity d a -> Bool
isNaN = a -> Bool
forall a. RealFloat a => a -> Bool
P.isNaN (a -> Bool) -> (Quantity d a -> a) -> Quantity d a -> Bool
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Quantity d a -> a
forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
unQuantity
isNegativeZero :: RealFloat a => Quantity d a -> Bool
isNegativeZero :: Quantity d a -> Bool
isNegativeZero = a -> Bool
forall a. RealFloat a => a -> Bool
P.isNegativeZero (a -> Bool) -> (Quantity d a -> a) -> Quantity d a -> Bool
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Quantity d a -> a
forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
unQuantity
scaleFloat :: RealFloat a => Int -> Quantity d a -> Quantity d a
scaleFloat :: Int -> Quantity d a -> Quantity d a
scaleFloat Int
x = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity (a -> Quantity d a)
-> (Quantity d a -> a) -> Quantity d a -> Quantity d a
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Int -> a -> a
forall a. RealFloat a => Int -> a -> a
P.scaleFloat Int
x (a -> a) -> (Quantity d a -> a) -> Quantity d a -> a
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Quantity d a -> a
forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
unQuantity
infinity :: IEEE a => Quantity d a
infinity :: Quantity d a
infinity = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity a
forall a. IEEE a => a
F.infinity
minNormal :: IEEE a => Quantity d a
minNormal :: Quantity d a
minNormal = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity a
forall a. IEEE a => a
F.minNormal
maxFinite :: IEEE a => Quantity d a
maxFinite :: Quantity d a
maxFinite = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity a
forall a. IEEE a => a
F.maxFinite
epsilon :: IEEE a => Dimensionless a
epsilon :: Dimensionless a
epsilon = a -> Dimensionless a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity a
forall a. IEEE a => a
F.epsilon
copySign :: IEEE a => Quantity d a -> Quantity d a -> Quantity d a
copySign :: Quantity d a -> Quantity d a -> Quantity d a
copySign = (a -> a -> a) -> Quantity d a -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension) (s3 :: ExactPi') (d3 :: Dimension).
(a -> a -> a)
-> SQuantity s1 d1 a -> SQuantity s2 d2 a -> SQuantity s3 d3 a
liftQ2 a -> a -> a
forall a. IEEE a => a -> a -> a
F.copySign
identicalIEEE :: IEEE a => Quantity d a -> Quantity d a -> Bool
identicalIEEE :: Quantity d a -> Quantity d a -> Bool
identicalIEEE (Quantity x) (Quantity y) = a -> a -> Bool
forall a. IEEE a => a -> a -> Bool
F.identicalIEEE a
x a
y
succIEEE :: IEEE a => Quantity d a -> Quantity d a
succIEEE :: Quantity d a -> Quantity d a
succIEEE = (a -> a) -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension).
(a -> a) -> SQuantity s1 d1 a -> SQuantity s2 d2 a
liftQ a -> a
forall a. IEEE a => a -> a
F.succIEEE
predIEEE :: IEEE a => Quantity d a -> Quantity d a
predIEEE :: Quantity d a -> Quantity d a
predIEEE = (a -> a) -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension).
(a -> a) -> SQuantity s1 d1 a -> SQuantity s2 d2 a
liftQ a -> a
forall a. IEEE a => a -> a
F.predIEEE
bisectIEEE :: IEEE a => Quantity d a -> Quantity d a -> Quantity d a
bisectIEEE :: Quantity d a -> Quantity d a -> Quantity d a
bisectIEEE (Quantity x) (Quantity y) = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity (a -> Quantity d a) -> a -> Quantity d a
forall a b. (a -> b) -> a -> b
$ a -> a -> a
forall a. IEEE a => a -> a -> a
F.bisectIEEE a
x a
y
nan :: IEEE a => Quantity d a
nan :: Quantity d a
nan = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity a
forall a. IEEE a => a
F.nan
nanWithPayload :: IEEE a => Word64 -> Quantity d a
nanWithPayload :: Word64 -> Quantity d a
nanWithPayload = a -> Quantity d a
forall (s :: ExactPi') (d :: Dimension) a.
a -> Dimensional ('DQuantity s) d a
Quantity (a -> Quantity d a) -> (Word64 -> a) -> Word64 -> Quantity d a
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Word64 -> a
forall a. IEEE a => Word64 -> a
F.nanWithPayload
nanPayload :: IEEE a => Quantity d a -> Word64
nanPayload :: Quantity d a -> Word64
nanPayload = a -> Word64
forall a. IEEE a => a -> Word64
F.nanPayload (a -> Word64) -> (Quantity d a -> a) -> Quantity d a -> Word64
forall k (cat :: k -> k -> Type) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Quantity d a -> a
forall (s :: ExactPi') (d :: Dimension) a. SQuantity s d a -> a
unQuantity
minNum :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a
minNum :: Quantity d a -> Quantity d a -> Quantity d a
minNum = (a -> a -> a) -> Quantity d a -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension) (s3 :: ExactPi') (d3 :: Dimension).
(a -> a -> a)
-> SQuantity s1 d1 a -> SQuantity s2 d2 a -> SQuantity s3 d3 a
liftQ2 a -> a -> a
forall a. RealFloat a => a -> a -> a
F.minNum
maxNum :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a
maxNum :: Quantity d a -> Quantity d a -> Quantity d a
maxNum = (a -> a -> a) -> Quantity d a -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension) (s3 :: ExactPi') (d3 :: Dimension).
(a -> a -> a)
-> SQuantity s1 d1 a -> SQuantity s2 d2 a -> SQuantity s3 d3 a
liftQ2 a -> a -> a
forall a. RealFloat a => a -> a -> a
F.maxNum
minNaN :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a
minNaN :: Quantity d a -> Quantity d a -> Quantity d a
minNaN = (a -> a -> a) -> Quantity d a -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension) (s3 :: ExactPi') (d3 :: Dimension).
(a -> a -> a)
-> SQuantity s1 d1 a -> SQuantity s2 d2 a -> SQuantity s3 d3 a
liftQ2 a -> a -> a
forall a. RealFloat a => a -> a -> a
F.minNaN
maxNaN :: RealFloat a => Quantity d a -> Quantity d a -> Quantity d a
maxNaN :: Quantity d a -> Quantity d a -> Quantity d a
maxNaN = (a -> a -> a) -> Quantity d a -> Quantity d a -> Quantity d a
forall a (s1 :: ExactPi') (d1 :: Dimension) (s2 :: ExactPi')
(d2 :: Dimension) (s3 :: ExactPi') (d3 :: Dimension).
(a -> a -> a)
-> SQuantity s1 d1 a -> SQuantity s2 d2 a -> SQuantity s3 d3 a
liftQ2 a -> a -> a
forall a. RealFloat a => a -> a -> a
F.maxNaN