SST 12.1.0
Structural Simulation Toolkit
|
Implements a random number generator using the Marsaglia method. More...
#include "sst/core/rng/marsaglia.h"
Public Member Functions | |
MarsagliaRNG (unsigned int initial_z, unsigned int initial_w) | |
Creates a new Marsaglia RNG using the initial seeds. More... | |
MarsagliaRNG () | |
Creates a new Marsaglia RNG using random initial seeds (which are read from the system clock). More... | |
void | restart (unsigned int new_z, unsigned int new_w) |
Restart the random number generator with new seeds. More... | |
double | nextUniform () override |
Generates the next random number as a double in the range 0 to 1. More... | |
uint32_t | generateNextUInt32 () override |
Generates the next random number as an unsigned 32-bit integer. More... | |
uint64_t | generateNextUInt64 () override |
Generates the next random number as an unsigned 64-bit integer. More... | |
int64_t | generateNextInt64 () override |
Generates the next number as a signed 64-bit integer. More... | |
int32_t | generateNextInt32 () override |
Generates the next number as a signed 32-bit integer. More... | |
void | seed (uint64_t newSeed) |
Seed the XOR RNG. | |
Public Member Functions inherited from SST::RNG::Random | |
virtual double | nextUniform ()=0 |
Generates the next random number in the range [0,1). More... | |
virtual uint32_t | generateNextUInt32 ()=0 |
Generates the next random number as an unsigned 32-bit integer. More... | |
virtual uint64_t | generateNextUInt64 ()=0 |
Generates the next random number as an unsigned 64-bit integer. More... | |
virtual int64_t | generateNextInt64 ()=0 |
Generates the next random number as a signed 64-bit integer. More... | |
virtual int32_t | generateNextInt32 ()=0 |
Generates the next random number as a signed 32-bit integer. More... | |
virtual | ~Random () |
Destroys the random number generator. | |
Implements a random number generator using the Marsaglia method.
This method is computationally cheap and provides a reasonable distribution of random numbers. If you need additional strength in the random numbers you may want to consider the Mersenne RNG.
For more information see the Multiply-with-carry Random Number Generator article
at Wikipedia (http://en.wikipedia.org/wiki/Multiply-with-carry).
MarsagliaRNG::MarsagliaRNG | ( | unsigned int | initial_z, |
unsigned int | initial_w | ||
) |
Creates a new Marsaglia RNG using the initial seeds.
[in] | initial_z | One of the random seed pairs |
[in] | initial_w | One of the random seed pairs. |
MarsagliaRNG::MarsagliaRNG | ( | ) |
Creates a new Marsaglia RNG using random initial seeds (which are read from the system clock).
Note that these will create variation between runs and between platforms.
|
overridevirtual |
Generates the next number as a signed 32-bit integer.
Implements SST::RNG::Random.
Referenced by generateNextInt64(), and generateNextUInt32().
|
overridevirtual |
Generates the next number as a signed 64-bit integer.
Implements SST::RNG::Random.
References generateNextInt32().
Referenced by generateNextUInt64().
|
overridevirtual |
Generates the next random number as an unsigned 32-bit integer.
Implements SST::RNG::Random.
References generateNextInt32().
|
overridevirtual |
Generates the next random number as an unsigned 64-bit integer.
Implements SST::RNG::Random.
References generateNextInt64().
|
overridevirtual |
Generates the next random number as a double in the range 0 to 1.
Implements SST::RNG::Random.
void MarsagliaRNG::restart | ( | unsigned int | new_z, |
unsigned int | new_w | ||
) |
Restart the random number generator with new seeds.
[in] | new_z | A new Z-seed |
[in] | new_w | A new W-seed |