PRandom Class Reference

Mersenne Twister random number generator. More...

`#include <random.h>`

## Public Member Functions

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

## Static Public Member Functions

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

## Protected Types

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 | ( |  | ) |

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.

Referenced by operator unsigned().

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 | ( | 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.

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.

static unsigned PRandom::Number | ( | unsigned | maximum | ) |

static

Get a random number between zero and maximum.

static unsigned PRandom::Number | ( | unsigned | minimum,
|  | unsigned | maximum
| ) |  |

static

Get a random number between minimum and maximum.

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()

References 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