PTLib  Version 2.12.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
seedNew 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
seedNew 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: