# PRandom Class Reference

Mersenne Twister random number generator. More...

`#include <random.h>`

List of all members.

## Public Member Functions

| PRandom ()
| Construct the random number generator.
| PRandom (DWORD seed)
| Construct the random number generator.
void | SetSeed (DWORD seed)
| Set the seed for the random number generator.
unsigned | Generate ()
| Get the next psuedo-random number in sequence.
unsigned | Generate (unsigned maximum)
| Get the next psuedo-random number in sequence.
unsigned | Generate (unsigned minimum, unsigned maximum)
| Get the next psuedo-random number in sequence.
| operator unsigned ()
| Get the next psuedo-random number in sequence.

## Static Public Member Functions

static unsigned | Number ()
| Get the next psuedo-random number in sequence.
static unsigned | Number (unsigned maximum)
| Get a random number between zero and maximum.
static unsigned | Number (unsigned minimum, unsigned maximum)
| Get a random number between minimum and maximum.

## Protected Types

| RandBits = 8
| I recommend 8 for crypto, 4 for simulations.
| RandSize = 1<<RandBits
enum | { RandBits = 8, RandSize = 1<<RandBits }

## Protected Attributes

DWORD | randcnt
DWORD | randrsl [RandSize]
DWORD | randmem [RandSize]
DWORD | randa
DWORD | randb
DWORD | randc

## Detailed Description

Mersenne Twister random number generator.

An application would create a static instance of this class, and then use if to generate a sequence of psuedo-random numbers.

Usually an application would simply use PRandom::Number() but if performance is an issue then it could also create a static local variable such as: { static PRandom rand; for (i = 0; i < 10000; i++) array[i] = rand; }

This method is not thread safe, so it is the applications responsibility to assure that its calls are single threaded.

## Member Enumeration Documentation

anonymous enum`[protected]`

Enumerator:

  RandBits | I recommend 8 for crypto, 4 for simulations.
  RandSize |

## Constructor & Destructor Documentation

PRandom::PRandom | ( |  | ) |

Construct the random number generator.

This version will seed the random number generator with a value based on the system time as returned by time() and clock().

PRandom::PRandom | ( | DWORD | seed | ) |

Construct the random number generator.

This version allows the application to choose the seed, thus letting it get the same sequence of values on each run. Useful for debugging.

Parameters:

  seed | New seed value, must not be zero

## Member Function Documentation

unsigned PRandom::Generate | ( | unsigned | minimum,
|  | unsigned | maximum |
| ) |  |  |

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer from minimum to maximum. Uses the Generate() function and scales and shifts accordingly.

unsigned PRandom::Generate | ( | unsigned | maximum | ) |

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer from 0 to maximum. Uses the Generate() function and scales accordingly.

unsigned PRandom::Generate | ( |  | ) |

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer (32bit) which is uniformly distributed among 0 to 2^32-1 for each call.

static unsigned PRandom::Number | ( | unsigned | minimum,
|  | unsigned | maximum |
| ) |  |  | `[static]`

Get a random number between minimum and maximum.

static unsigned PRandom::Number | ( | unsigned | maximum | ) | `[static]`

Get a random number between zero and maximum.

static unsigned PRandom::Number | ( |  | ) | `[static]`

Get the next psuedo-random number in sequence.

This utilises a single system wide thread safe PRandom variable. All threads etc will share the same psuedo-random sequence.

PRandom::operator unsigned | ( |  | ) | `[inline]`

Get the next psuedo-random number in sequence.

This generates one pseudorandom unsigned integer which is uniformly distributed among 0 to maximum for each call. Uses Generate()

void PRandom::SetSeed | ( | DWORD | seed | ) |

Set the seed for the random number generator.

Parameters:

  seed | New seed value, must not be zero

## Member Data Documentation

DWORD PRandom::randa `[protected]`

DWORD PRandom::randb `[protected]`

DWORD PRandom::randc `[protected]`

DWORD PRandom::randcnt `[protected]`

DWORD PRandom::randmem[RandSize]`[protected]`

DWORD PRandom::randrsl[RandSize]`[protected]`

The documentation for this class was generated from the following file:

- random.h