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)