module Stochastic.Exponential(Exponential, mkExp) where
import Stochastic.Distribution
import Stochastic.Uniform
import Data.Word
import Data.ReinterpretCast
import Helpers
data Exponential = Exponential Double Uniform
viaWord :: Double -> Int
viaWord w = fromInteger $ toInteger $ doubleToWord w
mkExp :: Uniform -> Double -> Exponential
mkExp base y = Exponential y base
instance ContinuousDistribution Exponential where
randDouble (Exponential y u) =
mapTuple (\x -> (1.0/y) * (log $ x)) (Exponential y) (randDouble u)