A Discrete-Event Network Simulator Home Tutorials  ▼ Docs    ▼ Develop ▼ 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...

## 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] A First matrix argument. [in] B Second matrix argument. [out] C Result matrix. [in] m Modulus.

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

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] src Matrix input argument `A`. [out] dst Matrix output `B`. [in] m Modulus. [in] e The exponent.

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

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] A Matrix argument, 3x3. [in] s Three component input vector. [out] v Three component output vector. [in] m Modulus.

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

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

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] a First multiplicative argument. [in] s Second multiplicative argument. [in] c Additive argument. [in] m Modulus.
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}::m1 = 4294967087.0
 const double anonymous_namespace{rng-stream.cc}::m2 = 4294944443.0
 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.