# Random Number Generators
[Random Number Generation]

Collaboration diagram for Random Number Generators:

## Detailed Description

These classes define objects which provide random or pseudorandom numbers, either from a discrete or a continuous interval. The random number generator supplied as a part of this library are all uniform random number generators which provide a sequence of random number uniformly distributed over their range.

A number generator is a function object with an operator() that takes zero arguments and returns a number.

A compliant random number generator must satisfy the following requirements.

Random Number Generator Requirements
To be documented.

## Classes

- class std::discard_block< _UniformRandomNumberGenerator, __p, __r >
- class std::linear_congruential< _UIntType, __a, __c, __m >
    A model of a linear congruential random number generator. More...
- class std::mersenne_twister< _UIntType, __w, __n, __m, __r, __a, __u, __s, __b, __t, __c, __l >
- class std::random_device
- class std::subtract_with_carry< _IntType, __m, __s, __r >
- class std::subtract_with_carry_01< _RealType, __w, __s, __r >
- class std::xor_combine< _UniformRandomNumberGenerator1, __s1, _UniformRandomNumberGenerator2, __s2 >

## Typedefs

- typedef linear_congruential<
  unsigned long, 48271, 0, 2147483647 > std::minstd_rand
- typedef linear_congruential<
  unsigned long, 16807, 0, 2147483647 > std::minstd_rand0
- typedef mersenne_twister<
  unsigned long, 32, 624, 397, 31, 0x9908b0dful, 11, 7, 0x9d2c5680ul, 15, 0xefc60000ul, 18 > std::mt19937
- typedef discard_block< subtract_with_carry<
  unsigned long,(1UL<< 24), 10, 24 >, 223, 24 > std::ranlux3
- typedef discard_block< subtract_with_carry_01<
  float, 24, 10, 24 >, 223, 24 > std::ranlux3_01
- typedef discard_block< subtract_with_carry<
  unsigned long,(1UL<< 24), 10, 24 >, 389, 24 > std::ranlux4
- typedef discard_block< subtract_with_carry_01<
  float, 24, 10, 24 >, 389, 24 > std::ranlux4_01
- typedef subtract_with_carry_01<
  double, 48, 5, 12 > std::ranlux64_base_01
- typedef subtract_with_carry_01<
  float, 24, 10, 24 > std::ranlux_base_01

## Typedef Documentation

typedef linear_congruential<unsigned long, 48271, 0, 2147483647> std::minstd_rand

An alternative LCR (Lehmer Generator function) .

Definition at line 449 of file tr1_impl/random.

typedef linear_congruential<unsigned long, 16807, 0, 2147483647> std::minstd_rand0

The classic Minimum Standard rand0 of Lewis, Goodman, and Miller.

Definition at line 444 of file tr1_impl/random.

typedef mersenne_twister< unsigned long, 32, 624, 397, 31, 0x9908b0dful, 11, 7, 0x9d2c5680ul, 15, 0xefc60000ul, 18 > std::mt19937

The classic Mersenne Twister.

Reference: M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-Dimensionally Equidistributed Uniform Pseudo-Random Number Generator", ACM Transactions on Modeling and Computer Simulation, Vol. 8, No. 1, January 1998, pp 3-30.

Definition at line 631 of file tr1_impl/random.

typedef discard_block< subtract_with_carry<unsigned long, (1UL << 24), 10, 24>, 223, 24 > std::ranlux3

James's luxury-level-3 integer adaptation of Luescher's generator.

Definition at line 1194 of file tr1_impl/random.

typedef discard_block< subtract_with_carry<unsigned long, (1UL << 24), 10, 24>, 389, 24 > std::ranlux4

James's luxury-level-4 integer adaptation of Luescher's generator.

Definition at line 1203 of file tr1_impl/random.