AERN-Real-0.9.1: src/Data/Number/ER/Real/Approx/Elementary.hs
{-|
Module : Data.Number.ER.Real.Approx.Elementary
Description : abstraction of exact reals capable of elementary operations
Copyright : (c) Michal Konecny
License : BSD3
Maintainer : mik@konecny.aow.cz
Stability : experimental
Portability : portable
To be imported qualified, usually with the synonym RAEL.
-}
module Data.Number.ER.Real.Approx.Elementary
(
ERApproxElementary(..)
)
where
import Prelude hiding (exp, log, sin, cos)
import qualified Data.Number.ER.Real.Approx as RA
import Data.Number.ER.BasicTypes
import Data.Number.ER.Real.Arithmetic.Elementary
{-|
A class defining various common real number operations
in a approximation-aware fashion, ie introducing effort indices.
All operations here have default implementations based on
"Data.Number.ER.Real.Arithmetic.Elementary".
-}
class (RA.ERIntApprox ra) => (ERApproxElementary ra)
where
abs :: EffortIndex -> ra -> ra
abs ix = Prelude.abs
min :: EffortIndex -> ra -> ra -> ra
min ix = Prelude.min
max :: EffortIndex -> ra -> ra -> ra
max ix = Prelude.max
exp :: EffortIndex -> ra -> ra
exp = erExp_IR
log :: EffortIndex -> ra -> ra
log = erLog_IR
(**) :: EffortIndex -> ra -> ra -> ra
(**) ix b e = exp ix $ e * (log ix b)
pi :: EffortIndex -> ra
pi = erPi_R
sin :: EffortIndex -> ra -> ra
sin = erSine_IR
cos :: EffortIndex -> ra -> ra
cos = erCosine_IR
tan :: EffortIndex -> ra -> ra
tan ix r = (sin ix r) / (cos ix r)
atan :: EffortIndex -> ra -> ra
atan = erATan_IR