mwc-random-0.15.0.2: Fast, high quality pseudo random number generation
Copyright (c) 2012 Aleksey Khudyakov
License BSD3
Maintainer bos@serpentine.com
Stability experimental
Portability portable
Safe Haskell None
Language Haskell2010

System.Random.MWC.CondensedTable

Description

Table-driven generation of random variates. This approach can generate random variates in O(1) time for the supported distributions, at a modest cost in initialization time.

Synopsis

Condensed tables

data CondensedTable v a Source #

A lookup table for arbitrary discrete distributions. It allows the generation of random variates in O(1) . Note that probability is quantized in units of 1/2^32 , and all distributions with infinite support (e.g. Poisson) should be truncated.

type CondensedTableV = CondensedTable Vector Source #

A CondensedTable that uses boxed vectors, and is able to hold any type of element.

genFromTable :: ( StatefulGen g m, Vector v a) => CondensedTable v a -> g -> m a Source #

Generate a random value using a condensed table.

Constructors for tables

tableFromProbabilities :: ( Vector v (a, Word32 ), Vector v (a, Double ), Vector v a, Vector v Word32 ) => v (a, Double ) -> CondensedTable v a Source #

Generate a condensed lookup table from a list of outcomes with given probabilities. The vector should be non-empty and the probabilites should be non-negative and sum to 1. If this is not the case, this algorithm will construct a table for some distribution that may bear no resemblance to what you intended.

tableFromWeights :: ( Vector v (a, Word32 ), Vector v (a, Double ), Vector v a, Vector v Word32 ) => v (a, Double ) -> CondensedTable v a Source #

Same as tableFromProbabilities but treats number as weights not probilities. Non-positive weights are discarded, and those remaining are normalized to 1.

tableFromIntWeights :: ( Vector v (a, Word32 ), Vector v a, Vector v Word32 ) => v (a, Word32 ) -> CondensedTable v a Source #

Generate a condensed lookup table from integer weights. Weights should sum to 2^32 at least approximately. This function will correct small deviations from 2^32 such as arising from rounding errors. But for large deviations it's likely to product incorrect result with terrible performance.

Disrete distributions

tablePoisson :: Double -> CondensedTableU Int Source #

Create a lookup table for the Poisson distibution. Note that table construction may have significant cost. For λ < 100 it takes as much time to build table as generation of 1000-30000 variates.

tableBinomial Source #

Arguments

:: Int

Number of tries

-> Double

Probability of success

-> CondensedTableU Int

Create a lookup table for the binomial distribution.

References