STE-Industries: utilities testing
GraphicSpace::SimpleRandomGenerator Class Reference

#include "SimpleRandomGenerator.h"

Collaboration diagram for GraphicSpace::SimpleRandomGenerator:
Collaboration graph

Public Member Functions

 SimpleRandomGenerator (const SimpleRandomGenerator &Argument) noexcept=default
 
 SimpleRandomGenerator (SimpleRandomGenerator &&Argument) noexcept=default
 
 SimpleRandomGenerator (uint_fast32_t thisMultiplier, uint_fast32_t thisConstant, uint_fast32_t thisModule) noexcept
 
 SimpleRandomGenerator (void) noexcept
 
 ~SimpleRandomGenerator (void) noexcept=default
 
uint_fast32_t Generate (uint_fast32_t Maximum) noexcept
 
uint_fast32_t GetValue (void) const noexcept
 
SimpleRandomGeneratoroperator= (const SimpleRandomGenerator &Argument) noexcept=default
 
SimpleRandomGeneratoroperator= (SimpleRandomGenerator &&Argument) noexcept=default
 
void SetSeed (uint_fast32_t thisConstant) noexcept
 

Private Member Functions

uint_fast32_t Generate (void) noexcept
 

Private Attributes

uint_fast32_t Constant
 
uint_fast32_t Module
 
uint_fast32_t Multiplier
 
uint_fast32_t Value
 

Static Private Attributes

static constexpr uint_fast32_t DEFAULT_CONSTANT = 0
 
static constexpr uint_fast32_t DEFAULT_MODULE = 0
 
static constexpr uint_fast32_t DEFAULT_MULTIPLIER = 0
 
static constexpr uint_fast32_t DEFAULT_SEED = 0
 

Detailed Description

The SimpleRandomGenerator class represents a linear congruent random numbers generator.
Proper choice of the parameter ensures that the cycle of generated numbers repeats itself only after Module generations.
See Erwin Donald Knuth, The art of Computer Programming, vol II.

Definition at line 31 of file SimpleRandomGenerator.h.

Constructor & Destructor Documentation

◆ SimpleRandomGenerator() [1/4]

GraphicSpace::SimpleRandomGenerator::SimpleRandomGenerator ( void  )
inlinenoexcept
Description:
Constructor; initialize the object with default values.
Exceptions
None.
Returns
Not applicable.
See also
DEFAULT_MULTIPLIER
DEFAULT_CONSTANT
DEFAULT_MODULE
DEFAULT_SEED

Definition at line 54 of file SimpleRandomGenerator.inl.

◆ SimpleRandomGenerator() [2/4]

GraphicSpace::SimpleRandomGenerator::SimpleRandomGenerator ( const SimpleRandomGenerator Argument)
defaultnoexcept

◆ SimpleRandomGenerator() [3/4]

GraphicSpace::SimpleRandomGenerator::SimpleRandomGenerator ( SimpleRandomGenerator &&  Argument)
defaultnoexcept

◆ SimpleRandomGenerator() [4/4]

GraphicSpace::SimpleRandomGenerator::SimpleRandomGenerator ( uint_fast32_t  thisMultiplier,
uint_fast32_t  thisConstant,
uint_fast32_t  thisModule 
)
inlinenoexcept
Description:
Constructor; initialize Value with DEFAULT_SEED.
Parameters
thisMultiplierMultiplier.
thisConstantConstant.
thisModuleModule.
Exceptions
None.
Returns
Not applicable.
Note
If Module is not less than UINT32_MAX, the behavior is undefined.
See also
DEFAULT_SEED

Definition at line 80 of file SimpleRandomGenerator.inl.

◆ ~SimpleRandomGenerator()

GraphicSpace::SimpleRandomGenerator::~SimpleRandomGenerator ( void  )
defaultnoexcept

Member Function Documentation

◆ Generate() [1/2]

uint_fast32_t GraphicSpace::SimpleRandomGenerator::Generate ( uint_fast32_t  Maximum)
inlinenoexcept
Description:
Generate a new random number, between 0 and Maximum, with uniform probability.
Parameters
MaximumThe maximum number that can be generated; if it is zero, zero is generated;
Exceptions
None.
Returns
uint_fast32_t The generated number.
Note
A new value is computed generating a random number and then verifying if it is less than Module - (Module + 1) % (Maximum + 1); if it is not less, it is discarded and a new random number is generated. This ensures that the generated numbers have a uniform probability distribution.
The algorithm used to generate the random numbers guarantees that a valid number is generated quickly: less that two attempts are necessary on average.
If Maximum is not less than Module, the behavior is undefined.

Definition at line 148 of file SimpleRandomGenerator.inl.

◆ Generate() [2/2]

uint_fast32_t GraphicSpace::SimpleRandomGenerator::Generate ( void  )
inlineprivatenoexcept
Description:
Generate a new random number, between 0 and Module, with uniform probability.
Exceptions
None.
Returns
uint_fast32_t the generated value.
Note
A new value is computed as (Value * Multiplier + Constant) % Module and and it is stored in Value.

Definition at line 32 of file SimpleRandomGenerator.inl.

◆ GetValue()

uint_fast32_t GraphicSpace::SimpleRandomGenerator::GetValue ( void  ) const
inlinenoexcept
Description:
Get current seed value, equal to latest generated number.
Exceptions
None.
Returns
uint_fast32_t The seed value.

Definition at line 115 of file SimpleRandomGenerator.inl.

Referenced by GraphicSpace::RandomGenerator::GetSeed().

Here is the caller graph for this function:

◆ operator=() [1/2]

SimpleRandomGenerator& GraphicSpace::SimpleRandomGenerator::operator= ( const SimpleRandomGenerator Argument)
defaultnoexcept

◆ operator=() [2/2]

SimpleRandomGenerator& GraphicSpace::SimpleRandomGenerator::operator= ( SimpleRandomGenerator &&  Argument)
defaultnoexcept

◆ SetSeed()

void GraphicSpace::SimpleRandomGenerator::SetSeed ( uint_fast32_t  Seed)
inlinenoexcept
Description:
Set the seed of the generator.
Parameters
SeedInitial value.
Exceptions
None.
Returns
Not applicable.

Definition at line 100 of file SimpleRandomGenerator.inl.

Referenced by GraphicSpace::RandomGenerator::SetSeed().

Here is the caller graph for this function:

Member Data Documentation

◆ Constant

GraphicSpace::SimpleRandomGenerator::Constant
private

Additive constant used by the random number generator.

Definition at line 45 of file SimpleRandomGenerator.h.

◆ DEFAULT_CONSTANT

GraphicSpace::SimpleRandomGenerator::DEFAULT_CONSTANT = 0
staticconstexprprivate

Default constant value.

Definition at line 61 of file SimpleRandomGenerator.h.

◆ DEFAULT_MODULE

GraphicSpace::SimpleRandomGenerator::DEFAULT_MODULE = 0
staticconstexprprivate

Default module value.

Definition at line 65 of file SimpleRandomGenerator.h.

◆ DEFAULT_MULTIPLIER

GraphicSpace::SimpleRandomGenerator::DEFAULT_MULTIPLIER = 0
staticconstexprprivate

Default multiplier value.

Definition at line 57 of file SimpleRandomGenerator.h.

◆ DEFAULT_SEED

GraphicSpace::SimpleRandomGenerator::DEFAULT_SEED = 0
staticconstexprprivate

Default seed value.

Definition at line 69 of file SimpleRandomGenerator.h.

◆ Module

GraphicSpace::SimpleRandomGenerator::Module
private

Module used by the random number generator.

Definition at line 49 of file SimpleRandomGenerator.h.

◆ Multiplier

GraphicSpace::SimpleRandomGenerator::Multiplier
private

Multiplier used by the random number generator.

Note
It must be a prime number less than UINT32_MAX and of the form 4 * n + 1.

Definition at line 41 of file SimpleRandomGenerator.h.

◆ Value

GraphicSpace::SimpleRandomGenerator::Value
private

Latest generated value.

Definition at line 53 of file SimpleRandomGenerator.h.


The documentation for this class was generated from the following files: