Computer Generation of Statistical Distributions
by Richard Saucier
Abstract
This document presents a collection of computergenerated statistical
distributions which are useful for performing Monte Carlo simulations.
The distributions are encapsulated into a C++ class,
called Random,
so that they can be used with any C++ program.
The class currently contains
 27 continuous distributions,
 9 discrete distributions,
 datadriven distributions,
 bivariate distributions, and
 numbertheoretic distributions.
The class is designed to be flexible and extensible,
and this is supported in two ways:
(1) a function pointer is provided so that the userprogrammer can specify
an arbitrary probability density function, and
(2) new distributions can easily be added by coding them directly into the
class.
The format of the documentation is designed to provide the practitioner of Monte Carlo
simulations with a handy reference for generating statistical distributions.
However, to be selfcontained,
various techniques for generating distributions are also discussed,
as well as procedures for estimating distribution parameters from data.
Since most of these distributions rely upon a good underlying
uniform distribution of random numbers,
several candidate generators are presented along with
selection criteria and test results.
Indeed,
it is noted that one of the more popular generators (rand
)
is probably overused and under what conditions it should be avoided.
Sample Program
Here is a simple example of how the Random class can be used
to generate 1000 normallydistributed,
pseudorandom numbers:
#include <iostream.h>
#include "Random.h" // include the header file
void main( void )
{
Random rv; // declare a random variate (using the UNIX process ID as seed)
for ( int i = 0; i < 1000; i++ )
cout << rv.normal() // reference the normal distribution (using default parameters)
<< endl;
}

Obtaining the Source Code
The complete source code is contained in a single header file,
Random.h
.
You merely need to include
this file in your code to make use of the distributions;
precompilation is not necessary.
Obtaining the Documentation
The complete PDF documentation (106 pages, 1.8 MB) is available here.