module GSL.Random.Dist (
getPoisson,
getFlat,
getGaussian,
) where
import Foreign.C.Types ( CUInt, CDouble )
import Foreign.ForeignPtr ( withForeignPtr )
import Foreign.Ptr ( Ptr )
import GSL.Random.Gen.Internal ( RNG(..) )
getPoisson :: RNG -> Double -> IO Int
getPoisson (MkRNG fptr) mu =
let mu' = realToFrac mu
in withForeignPtr fptr $ \ptr -> do
x <- gsl_ran_poisson ptr mu'
return $ (fromInteger . toInteger) x
foreign import ccall unsafe "gsl/gsl_randist.h"
gsl_ran_poisson :: Ptr () -> CDouble -> IO CUInt
getFlat :: RNG -> Double -> Double -> IO (Double)
getFlat (MkRNG fptr) a b =
let a' = realToFrac a
b' = realToFrac b
in withForeignPtr fptr $ \ptr -> do
x <- gsl_ran_flat ptr a' b'
return $ realToFrac x
foreign import ccall unsafe "gsl/gsl_randist.h"
gsl_ran_flat :: Ptr () -> CDouble -> CDouble -> IO CDouble
getGaussian :: RNG -> Double -> IO Double
getGaussian (MkRNG fptr) sigma =
let sigma' = realToFrac sigma
in withForeignPtr fptr $ \ptr -> do
x <- gsl_ran_gaussian ptr sigma'
return $ realToFrac x
foreign import ccall unsafe "gsl/gsl_randist.h"
gsl_ran_gaussian :: Ptr () -> CDouble -> IO CDouble