PTLib
Version 2.12.9
|
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 |
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.
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.
seed | New seed value, must not be zero |
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 |
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 |
Get a random number between zero and maximum.
|
static |
Get a random number between minimum and maximum.
|
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.
seed | New seed value, must not be zero |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |