packages feed

aern2-mp-0.2.9.0: src/AERN2/MP/Float/PreludeNum.hs

{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-|
    Module      :  AERN2.MP.Float.PreludeNum
    Description :  Prelude numerical operators for MPFloat
    Copyright   :  (c) Michal Konecny
    License     :  BSD3

    Maintainer  :  mikkonecny@gmail.com
    Stability   :  experimental
    Portability :  portable

    Instances for Prelude classes such as Num, Fractional, using an unspecified rounding.
-}

module AERN2.MP.Float.PreludeNum
(
)
where

import MixedTypesNumPrelude
import qualified Prelude as P

-- import AERN2.MP.Precision
import AERN2.MP.Float.Auxi

import AERN2.MP.Float.Type
import AERN2.MP.Float.Arithmetic

deriving instance P.Eq MPFloat
deriving instance P.Ord MPFloat

instance P.Num MPFloat where
    fromInteger = MPFloat . P.fromInteger -- default precision (mBound)!
    negate = lift1 P.negate
    abs = lift1 P.abs
    signum = lift1 P.signum
    (+) = c2 addCEDU
    (-) = c2 subCEDU
    (*) = c2 mulCEDU

instance P.Fractional MPFloat where
    fromRational = MPFloat . P.fromRational -- default precision (mBound)!
    (/) = c2 divCEDU

instance P.Floating MPFloat where
    sin = c1 sinCEDU
    cos = c1 cosCEDU
    exp = c1 expCEDU
    log = c1 logCEDU
    pi = error "Prelude.Floating MPFloat: pi not defined"
    asin = error "Prelude.Floating MPFloat: asin not defined yet"
    acos = error "Prelude.Floating MPFloat: acos not defined yet"
    atan = error "Prelude.Floating MPFloat: atan not defined yet"
    sinh = error "Prelude.Floating MPFloat: sinh not defined yet"
    cosh = error "Prelude.Floating MPFloat: cosh not defined yet"
    asinh = error "Prelude.Floating MPFloat: asinh not defined yet"
    acosh = error "Prelude.Floating MPFloat: acosh not defined yet"
    atanh = error "Prelude.Floating MPFloat: atanh not defined yet"

c1 :: 
    (t -> BoundsCEDU MPFloat) -> 
    (t -> MPFloat)
c1 op x = ceduCentre $ op x

c2 :: 
    (t1 -> t2 -> BoundsCEDU MPFloat) -> 
    (t1 -> t2 -> MPFloat)
c2 op x y = ceduCentre $ op x y

instance P.Real MPFloat where
    toRational (MPFloat a) = toRational a