A Discrete-Event Network Simulator
API
RNG Implementation.
+ Collaboration diagram for RNG Implementation.:

Files

file  rng-stream.cc
 Class RngStream and MRG32k3a implementation.
 
file  rng-stream.h
 Declaration of class RngStream.
 

Namespaces

 anonymous_namespace{rng-stream.cc}
 Unnamed namespace for MRG32k3a implementation details.
 

Classes

struct  anonymous_namespace{rng-stream.cc}::Precalculated
 The transition matrices of the two MRG components (in matrix form), raised to all powers of 2 from 1 to 191. More...
 
class  ns3::RngStream
 Combined Multiple-Recursive Generator MRG32k3a. More...
 

Typedefs

typedef double anonymous_namespace{rng-stream.cc}::Matrix[3][3]
 Type for 3x3 matrix of doubles. More...
 

Functions

void anonymous_namespace{rng-stream.cc}::MatMatModM (const Matrix A, const Matrix B, Matrix C, double m)
 Compute the matrix C = A*B MOD m. More...
 
void anonymous_namespace{rng-stream.cc}::MatTwoPowModM (const Matrix src, Matrix dst, double m, int32_t e)
 Compute the matrix B = (A^(2^e) Mod m); works also if A = B. More...
 
void anonymous_namespace{rng-stream.cc}::MatVecModM (const Matrix A, const double s[3], double v[3], double m)
 Compute the vector v = A*s MOD m. More...
 
double anonymous_namespace{rng-stream.cc}::MultModM (double a, double s, double c, double m)
 Return (a*s + c) MOD m; a, s, c and m must be < 2^35. More...
 

Variables

const double anonymous_namespace{rng-stream.cc}::a12 = 1403580.0
 First component multiplier of n - 2 value. More...
 
const double anonymous_namespace{rng-stream.cc}::a13n = 810728.0
 First component multiplier of n - 3 value. More...
 
const Matrix anonymous_namespace{rng-stream.cc}::A1p0
 First component transition matrix. More...
 
const double anonymous_namespace{rng-stream.cc}::a21 = 527612.0
 Second component multiplier of n - 1 value. More...
 
const double anonymous_namespace{rng-stream.cc}::a23n = 1370589.0
 Second component multiplier of n - 3 value. More...
 
const Matrix anonymous_namespace{rng-stream.cc}::A2p0
 Second component transition matrix. More...
 
const double anonymous_namespace{rng-stream.cc}::m1 = 4294967087.0
 First component modulus, 232 - 209. More...
 
const double anonymous_namespace{rng-stream.cc}::m2 = 4294944443.0
 Second component modulus, 232 - 22853. More...
 
const double anonymous_namespace{rng-stream.cc}::norm = 1.0 / (m1 + 1.0)
 Normalization to obtain randoms on [0,1). More...
 
const double anonymous_namespace{rng-stream.cc}::two17 = 131072.0
 Decomposition factor for computing a*s in less than 53 bits, 217 More...
 
const double anonymous_namespace{rng-stream.cc}::two53 = 9007199254740992.0
 IEEE-754 floating point precision, 253 More...
 

Detailed Description

Typedef Documentation

typedef double anonymous_namespace{rng-stream.cc}::Matrix[3][3]

Type for 3x3 matrix of doubles.

Definition at line 50 of file rng-stream.cc.

Function Documentation

void anonymous_namespace{rng-stream.cc}::MatMatModM ( const Matrix  A,
const Matrix  B,
Matrix  C,
double  m 
)

Compute the matrix C = A*B MOD m.

Assume that -m < s[i] < m. Note: works also if A = C or B = C or A = B = C.

Parameters
[in]AFirst matrix argument.
[in]BSecond matrix argument.
[out]CResult matrix.
[in]mModulus.

Definition at line 187 of file rng-stream.cc.

References anonymous_namespace{rng-stream.cc}::MatVecModM().

Referenced by anonymous_namespace{rng-stream.cc}::MatTwoPowModM().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void anonymous_namespace{rng-stream.cc}::MatTwoPowModM ( const Matrix  src,
Matrix  dst,
double  m,
int32_t  e 
)

Compute the matrix B = (A^(2^e) Mod m); works also if A = B.

Parameters
[in]srcMatrix input argument A.
[out]dstMatrix output B.
[in]mModulus.
[in]eThe exponent.

Definition at line 225 of file rng-stream.cc.

References anonymous_namespace{rng-stream.cc}::MatMatModM().

Referenced by anonymous_namespace{rng-stream.cc}::PowerOfTwoConstants().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void anonymous_namespace{rng-stream.cc}::MatVecModM ( const Matrix  A,
const double  s[3],
double  v[3],
double  m 
)

Compute the vector v = A*s MOD m.

Assume that -m < s[i] < m. Works also when v = s.

Parameters
[in]AMatrix argument, 3x3.
[in]sThree component input vector.
[out]vThree component output vector.
[in]mModulus.

Definition at line 158 of file rng-stream.cc.

References anonymous_namespace{rng-stream.cc}::MultModM(), and sample-rng-plot::x.

Referenced by ns3::RngStream::AdvanceNthBy(), and anonymous_namespace{rng-stream.cc}::MatMatModM().

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

double anonymous_namespace{rng-stream.cc}::MultModM ( double  a,
double  s,
double  c,
double  m 
)

Return (a*s + c) MOD m; a, s, c and m must be < 2^35.

This computes the result exactly, without exceeding the 53 bit precision of doubles.

Parameters
[in]aFirst multiplicative argument.
[in]sSecond multiplicative argument.
[in]cAdditive argument.
[in]mModulus.
Returns
(a*s +c) MOD m

Definition at line 118 of file rng-stream.cc.

References anonymous_namespace{rng-stream.cc}::two17.

Referenced by anonymous_namespace{rng-stream.cc}::MatVecModM().

+ Here is the caller graph for this function:

Variable Documentation

const double anonymous_namespace{rng-stream.cc}::a12 = 1403580.0

First component multiplier of n - 2 value.

Definition at line 66 of file rng-stream.cc.

Referenced by ns3::RngStream::RandU01().

const double anonymous_namespace{rng-stream.cc}::a13n = 810728.0

First component multiplier of n - 3 value.

Definition at line 70 of file rng-stream.cc.

Referenced by ns3::RngStream::RandU01().

const Matrix anonymous_namespace{rng-stream.cc}::A1p0
Initial value:
= {
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ -810728.0, 1403580.0, 0.0 }
}

First component transition matrix.

Definition at line 90 of file rng-stream.cc.

const double anonymous_namespace{rng-stream.cc}::a21 = 527612.0

Second component multiplier of n - 1 value.

Definition at line 74 of file rng-stream.cc.

Referenced by ns3::RngStream::RandU01().

const double anonymous_namespace{rng-stream.cc}::a23n = 1370589.0

Second component multiplier of n - 3 value.

Definition at line 78 of file rng-stream.cc.

Referenced by ns3::RngStream::RandU01().

const Matrix anonymous_namespace{rng-stream.cc}::A2p0
Initial value:
= {
{ 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{ -1370589.0, 0.0, 527612.0 }
}

Second component transition matrix.

Definition at line 98 of file rng-stream.cc.

const double anonymous_namespace{rng-stream.cc}::norm = 1.0 / (m1 + 1.0)

Normalization to obtain randoms on [0,1).

Definition at line 62 of file rng-stream.cc.

Referenced by ns3::RngStream::RandU01().

const double anonymous_namespace{rng-stream.cc}::two17 = 131072.0

Decomposition factor for computing a*s in less than 53 bits, 217

Definition at line 82 of file rng-stream.cc.

Referenced by anonymous_namespace{rng-stream.cc}::MultModM().

const double anonymous_namespace{rng-stream.cc}::two53 = 9007199254740992.0

IEEE-754 floating point precision, 253

Definition at line 86 of file rng-stream.cc.