mwc-random-0.13.3.1: Fast, high quality pseudo random number generation

System.Random.MWC.Distributions

Description

Pseudo-random number generation for non-uniform distributions.

Synopsis

# Variates: non-uniformly distributed values

## Continuous distributions

Arguments

 :: PrimMonad m => Double Mean -> Double Standard deviation -> Gen (PrimState m) -> m Double

Generate a normally distributed random variate with given mean and standard deviation.

standard :: PrimMonad m => Gen (PrimState m) -> m Double Source

Generate a normally distributed random variate with zero mean and unit variance.

The implementation uses Doornik's modified ziggurat algorithm. Compared to the ziggurat algorithm usually used, this is slower, but generates more independent variates that pass stringent tests of randomness.

Arguments

 :: PrimMonad m => Double Scale parameter -> Gen (PrimState m) Generator -> m Double

Generate an exponentially distributed random variate.

Arguments

 :: PrimMonad m => Double Scale parameter -> (Double, Double) Range to which distribution is truncated. Values may be negative. -> Gen (PrimState m) Generator. -> m Double

Generate truncated exponentially distributed random variate.

Arguments

 :: PrimMonad m => Double Shape parameter -> Double Scale parameter -> Gen (PrimState m) Generator -> m Double

Random variate generator for gamma distribution.

Arguments

 :: PrimMonad m => Int Number of degrees of freedom -> Gen (PrimState m) Generator -> m Double

Random variate generator for the chi square distribution.

Arguments

 :: PrimMonad m => Double alpha (>0) -> Double beta (>0) -> Gen (PrimState m) Generator -> m Double

Random variate generator for Beta distribution

## Discrete distribution

Arguments

 :: (PrimMonad m, Vector v Double) => v Double List of weights [>0] -> Gen (PrimState m) Generator -> m Int

Random variate generator for categorical distribution.

Note that if you need to generate a lot of variates functions System.Random.MWC.CondensedTable will offer better performance. If only few is needed this function will faster since it avoids costs of setting up table.

Arguments

 :: PrimMonad m => Double p success probability lies in (0,1] -> Gen (PrimState m) Generator -> m Int

Random variate generator for the geometric distribution, computing the number of failures before success. Distribution's support is [0..].

Arguments

 :: PrimMonad m => Double p success probability lies in (0,1] -> Gen (PrimState m) Generator -> m Int

Random variate generator for geometric distribution for number of trials. Distribution's support is [1..] (i.e. just `geometric0` shifted by 1).

Arguments

 :: PrimMonad m => Double Probability of success (returning True) -> Gen (PrimState m) Generator -> m Bool

Random variate generator for Bernoulli distribution

## Multivariate

Arguments

 :: (PrimMonad m, Traversable t) => t Double container of parameters -> Gen (PrimState m) Generator -> m (t Double)

Random variate generator for Dirichlet distribution

# Permutations

uniformPermutation :: forall m v. (PrimMonad m, Vector v Int) => Int -> Gen (PrimState m) -> m (v Int) Source

Random variate generator for uniformly distributed permutations. It returns random permutation of vector [0 .. n-1].

This is the Fisher-Yates shuffle

uniformShuffle :: (PrimMonad m, Vector v a) => v a -> Gen (PrimState m) -> m (v a) Source

Random variate generator for a uniformly distributed shuffle (all shuffles are equiprobable) of a vector. It uses Fisher-Yates shuffle algorithm.

uniformShuffleM :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Gen (PrimState m) -> m () Source

In-place uniformly distributed shuffle (all shuffles are equiprobable)of a vector.