aern2-mp-0.1.3.0: src/AERN2/MP/Float/Constants.hs
{-# LANGUAGE CPP #-}
{-|
Module : AERN2.MP.Float.Constants
Description : Special constants NaN, infinity etc
Copyright : (c) Michal Konecny
License : BSD3
Maintainer : mikkonecny@gmail.com
Stability : experimental
Portability : portable
Special constants NaN, infinity etc
-}
module AERN2.MP.Float.Constants
(
zero, one
, nan, infinity
)
where
import MixedTypesNumPrelude
import qualified Prelude as P
-- import Data.Ratio
#ifdef UseCDAR
import AERN2.MP.Float.UseCDAR.Type
import AERN2.MP.Float.UseCDAR.Conversions
#else
import AERN2.MP.Float.UseRounded.Type
import AERN2.MP.Float.UseRounded.Conversions
#endif
import AERN2.MP.Float.Operators
zero, one :: MPFloat
zero = mpFloat 0
one = mpFloat 1
nan, infinity :: MPFloat
nan = zero /. zero
infinity = one /. zero
itisNaN :: MPFloat -> Bool
itisNaN x = x *^ one /= x
itisInfinite :: MPFloat -> Bool
itisInfinite x =
x *^ (mpFloat 2) P.== x
&&
x P./= (mpFloat 0)
instance CanTestFinite MPFloat where
isInfinite = itisInfinite
isFinite x = not (itisInfinite x || itisNaN x)
instance CanTestNaN MPFloat where
isNaN = itisNaN