Mersenne RNG
The Mersenne generator provides better "randomness" compared to Marsaglia but is also more computationally intensive. The generator uses just one seed compared to Marsaglia's two.
Constructor
// #1 - use a random seed based on time-of-day
// NOTE: this will create variation between runs and between platforms.
MersenneRNG::MersenneRNG();
// #2 - use explicitly defined seed
MersenneRNG::MersenneRNG(unsigned int seed);
Create a new Mersenne random number generator.
Parameters
- returns None
generateNextInt32
int32_t generateNextInt32();
Generate the next signed 32-bit integer.
Parameters
- returns (int32_t) The next signed 32-bit integer.
generateNextInt64
int64_t generateNextInt64();
Generate the next signed 64-bit integer.
Parameters
- returns (int64_t) The next signed 64-bit integer.
generateNextUInt32
uint32_t generateNextUInt32();
Generate the next unsigned 32-bit integer.
Parameters
- returns (uint32_t) The next unsigned 32-bit integer.
generateNextUInt64
uint64_t generateNextUInt64();
Generate the next unsigned 64-bit integer.
Parameters
- returns (uint64_t) The next unsigned 64-bit integer
nextUniform
double nextUniform();
Generate the next double within the range [0,1).
Parameters
- returns (double) The next double within the range [0,1).
seed
void seed(uint64_t newSeed);
Re-seed the random number generator.
Parameters
- newSeed (uint64_t) A seed.
- returns None
Examples
Example 1: generateNextInt32()
SST::RNG::MersenneRNG* rng = new SST::RNG::MersenneRNG(11);
int rndNumber;
rndNumber = (int)(rng->generateNextInt32());
rndNumber = (rndNumber & 0x0000FFFF) ^ ((rndNumber & 0xFFFF0000) >> 16);
rndNumber = abs((int)(rndNumber % 3));
Example 2: generateNextUInt32()
SST::RNG::MersenneRNG randomGenerator = new SST::RNG::MersenneRNG(11);
int rndNumber;
int index = randomGenerator.generateNextUInt32() % (numWays-1);
Example 3: generateNextUInt64()
SST::RNG::MersenneRNG rng = new SST::RNG::MersenneRNG(11);
uint64_t selectA = (rng.generateNextUInt64() % pageCount);
uint64_t selectB = (rng.generateNextUInt64() % pageCount);
Header
#include <sst/core/rng/mersenne.h>