From 0a6dfde1ba98d4b05d8acd1f561a09955299677a Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Thu, 19 Nov 2009 00:09:38 -0500 Subject: [PATCH] floating: Add some of the exponential functions. --- Data/Floating/Classes.hs | 8 ++++++++ Data/Floating/Double.hs | 22 +++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Data/Floating/Classes.hs b/Data/Floating/Classes.hs index 3159a02..7492337 100644 --- a/Data/Floating/Classes.hs +++ b/Data/Floating/Classes.hs @@ -10,10 +10,18 @@ class Fractional a => Floating a where cos :: a -> a sin :: a -> a tan :: a -> a + exp :: a -> a + log :: a -> a class Floating a => RealFloat a where copysign :: a -> a -> a atan2 :: a -> a -> a + exp2 :: a -> a + expm1 :: a -> a + log10 :: a -> a + log1p :: a -> a + log2 :: a -> a + logb :: a -> a infinity :: a nan :: a pi :: a diff --git a/Data/Floating/Double.hs b/Data/Floating/Double.hs index d89b673..31fdda7 100644 --- a/Data/Floating/Double.hs +++ b/Data/Floating/Double.hs @@ -4,7 +4,7 @@ module Data.Floating.Double ( Double ) where -import Prelude hiding (Double, Floating, RealFloat) +import Prelude hiding (Double, Floating(..), RealFloat(..)) import Control.Applicative import Control.Monad import Data.Ratio @@ -32,6 +32,18 @@ foreign import ccall unsafe "copysign" c_copysign :: CDouble -> CDouble -> CDouble foreign import ccall unsafe "atan2" c_atan2 :: CDouble -> CDouble -> CDouble +foreign import ccall unsafe "exp2" + c_exp2 :: CDouble -> CDouble +foreign import ccall unsafe "expm1" + c_expm1 :: CDouble -> CDouble +foreign import ccall unsafe "log10" + c_log10 :: CDouble -> CDouble +foreign import ccall unsafe "log1p" + c_log1p :: CDouble -> CDouble +foreign import ccall unsafe "log2" + c_log2 :: CDouble -> CDouble +foreign import ccall unsafe "logb" + c_logb :: CDouble -> CDouble libmDouble :: (CDouble -> CDouble) -> Double -> Double libmDouble f a = toFloating $ f (toFloating a) @@ -82,7 +94,15 @@ instance Floating Double where cos (D# x) = D# (cosDouble# x) sin (D# x) = D# (sinDouble# x) tan (D# x) = D# (tanDouble# x) + exp (D# x) = D# (expDouble# x) + log (D# x) = D# (logDouble# x) instance RealFloat Double where copysign = libmDouble2 c_copysign atan2 = libmDouble2 c_atan2 + exp2 = libmDouble c_exp2 + expm1 = libmDouble c_expm1 + log10 = libmDouble c_log10 + log1p = libmDouble c_log1p + log2 = libmDouble c_log2 + logb = libmDouble c_logb -- 2.11.4.GIT