Bryan O'Sullivan avatar Bryan O'Sullivan committed 50528a6 Merge

Merge

Comments (0)

Files changed (1)

System/Random/MWC/Distributions.hs

       normal
     , standard
     , exponential
+    , truncatedExp
     , gamma
     , chiSquare
 
   return $! - log x / beta
 
 
+-- | Generate truncated exponentially distributed random variate.
+truncatedExp :: PrimMonad m
+             => Double            -- ^ Scale parameter
+             -> (Double,Double)   -- ^ Range to which distribution is
+                                  --   truncated. Values may be negative.
+             -> Gen (PrimState m) -- ^ Generator.
+             -> m Double
+{-# INLINE truncatedExp #-}
+truncatedExp beta (a,b) gen = do
+  -- We shift a to 0 and then generate distribution truncated to [0,b-a]
+  -- It's easier
+  let delta = b - a
+  p <- uniform gen
+  return $! a - log ( (1 - p) + p*exp(-beta*delta)) / beta
+
 -- | Random variate generator for gamma distribution.
 gamma :: PrimMonad m
       => Double                 -- ^ Shape parameter
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.