Namespace for MRG32k3a implementation details. More...
Classes | |
struct | Precalculated |
The transition matrices of the two MRG components (in matrix form), raised to all powers of 2 from 1 to 191. More... | |
Typedefs | |
typedef double | Matrix[3][3] |
Type for 3x3 matrix of doubles. | |
Functions | |
void | MatMatModM (const Matrix A, const Matrix B, Matrix C, double m) |
Compute the matrix C = A*B MOD m. | |
void | MatPowModM (const double A[3][3], double B[3][3], double m, int32_t n) |
Compute the matrix B = (A^n Mod m); works even if A = B. | |
void | 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. | |
void | MatVecModM (const Matrix A, const double s[3], double v[3], double m) |
Compute the vector v = A*s MOD m. | |
double | MultModM (double a, double s, double c, double m) |
Return (a*s + c) MOD m; a, s, c and m must be < 2^35. | |
Precalculated | PowerOfTwoConstants () |
Compute the transition matrices of the two MRG components raised to all powers of 2 from 1 to 191. | |
void | PowerOfTwoMatrix (int n, Matrix a1p, Matrix a2p) |
Get the transition matrices raised to a power of 2. | |
Variables | |
const double | a12 = 1403580.0 |
First component multiplier of n - 2 value. | |
const double | a13n = 810728.0 |
First component multiplier of n - 3 value. | |
const Matrix | A1p0 |
First component transition matrix. | |
const double | a21 = 527612.0 |
Second component multiplier of n - 1 value. | |
const double | a23n = 1370589.0 |
Second component multiplier of n - 3 value. | |
const Matrix | A2p0 |
Second component transition matrix. | |
const double | m1 = 4294967087.0 |
First component modulus, 232 - 209. | |
const double | m2 = 4294944443.0 |
Second component modulus, 232 - 22853. | |
const double | norm = 1.0 / (m1 + 1.0) |
Normalization to obtain randoms on [0,1). | |
const double | two17 = 131072.0 |
Decomposition factor for computing a*s in less than 53 bits, 217 | |
const double | two53 = 9007199254740992.0 |
IEEE-754 floating point precision, 253 | |
Namespace for MRG32k3a implementation details.
typedef double MRG32k3a::Matrix[3][3] |
Type for 3x3 matrix of doubles.
Definition at line 46 of file rng-stream.cc.
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.
[in] | A | First matrix argument. |
[in] | B | Second matrix argument. |
[out] | C | Result matrix. |
[in] | m | Modulus. |
Definition at line 172 of file rng-stream.cc.
References MatVecModM().
Referenced by MatPowModM(), and MatTwoPowModM().
Compute the matrix B = (A^n Mod m); works even if A = B.
[in] | A | Matrix input argument. |
[out] | B | Matrix output. |
[in] | m | Modulus. |
[in] | n | Exponent. |
Definition at line 241 of file rng-stream.cc.
References MatMatModM().
Compute the matrix B = (A^(2^e) Mod m); works also if A = B.
[in] | src | Matrix input argument A . |
[out] | dst | Matrix output B . |
[in] | m | Modulus. |
[in] | e | The exponent. |
Definition at line 211 of file rng-stream.cc.
References MatMatModM().
Referenced by PowerOfTwoConstants().
Compute the vector v = A*s MOD m.
Assume that -m < s[i] < m. Works also when v = s.
[in] | A | Matrix argument, 3x3. |
[in] | s | Three component input vector. |
[out] | v | Three component output vector. |
[in] | m | Modulus. |
Definition at line 143 of file rng-stream.cc.
References MultModM().
Referenced by ns3::RngStream::AdvanceNthBy(), and MatMatModM().
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.
[in] | a | First multiplicative argument. |
[in] | s | Second multiplicative argument. |
[in] | c | Additive argument. |
[in] | m | Modulus. |
(a*s +c) MOD m
Definition at line 103 of file rng-stream.cc.
Referenced by MatVecModM().
Precalculated MRG32k3a::PowerOfTwoConstants | ( | ) |
Compute the transition matrices of the two MRG components raised to all powers of 2 from 1 to 191.
Definition at line 289 of file rng-stream.cc.
References MRG32k3a::Precalculated::a1, A1p0, MRG32k3a::Precalculated::a2, A2p0, m1, m2, and MatTwoPowModM().
Referenced by PowerOfTwoMatrix().
Get the transition matrices raised to a power of 2.
[in] | n | The power of 2. |
[out] | a1p | The first transition matrix power. |
[out] | a2p | The second transition matrix power. |
Definition at line 307 of file rng-stream.cc.
References MRG32k3a::Precalculated::a1, MRG32k3a::Precalculated::a2, and PowerOfTwoConstants().
Referenced by ns3::RngStream::AdvanceNthBy().
const double MRG32k3a::a12 = 1403580.0 |
First component multiplier of n - 2 value.
Definition at line 58 of file rng-stream.cc.
Referenced by ns3::RngStream::RandU01().
const double MRG32k3a::a13n = 810728.0 |
First component multiplier of n - 3 value.
Definition at line 61 of file rng-stream.cc.
Referenced by ns3::RngStream::RandU01().
const Matrix MRG32k3a::A1p0 |
First component transition matrix.
Definition at line 76 of file rng-stream.cc.
Referenced by PowerOfTwoConstants().
const double MRG32k3a::a21 = 527612.0 |
Second component multiplier of n - 1 value.
Definition at line 64 of file rng-stream.cc.
Referenced by ns3::RngStream::RandU01().
const double MRG32k3a::a23n = 1370589.0 |
Second component multiplier of n - 3 value.
Definition at line 67 of file rng-stream.cc.
Referenced by ns3::RngStream::RandU01().
const Matrix MRG32k3a::A2p0 |
Second component transition matrix.
Definition at line 83 of file rng-stream.cc.
Referenced by PowerOfTwoConstants().
const double MRG32k3a::m1 = 4294967087.0 |
First component modulus, 232 - 209.
Definition at line 49 of file rng-stream.cc.
Referenced by PbbTestSuite::PbbTestSuite(), ns3::RngStream::RngStream(), ns3::RngStream::AdvanceNthBy(), UanTest::DoPhyTests(), ns3::tests::ComplexMatrixArrayTestCase::DoRun(), ns3::tests::MatrixArrayTestCase< T >::DoRun(), PowerOfTwoConstants(), and ns3::RngStream::RandU01().
const double MRG32k3a::m2 = 4294944443.0 |
Second component modulus, 232 - 22853.
Definition at line 52 of file rng-stream.cc.
Referenced by PbbTestSuite::PbbTestSuite(), ns3::RngStream::RngStream(), ns3::RngStream::AdvanceNthBy(), ns3::tests::ComplexMatrixArrayTestCase::DoRun(), ns3::tests::MatrixArrayTestCase< T >::DoRun(), PowerOfTwoConstants(), and ns3::RngStream::RandU01().
Normalization to obtain randoms on [0,1).
Definition at line 55 of file rng-stream.cc.
Referenced by ns3::TwoRaySpectrumPropagationLossModel::CalcBeamformingGain(), ns3::PhasedArrayModel::GetBeamformingVector(), ns3::TwoRaySpectrumPropagationLossModel::GetFtrFastFading(), ns3::PhasedArrayModel::norm(), and ns3::RngStream::RandU01().
const double MRG32k3a::two17 = 131072.0 |
Decomposition factor for computing a*s in less than 53 bits, 217
Definition at line 70 of file rng-stream.cc.
Referenced by MultModM().
const double MRG32k3a::two53 = 9007199254740992.0 |
IEEE-754 floating point precision, 253
Definition at line 73 of file rng-stream.cc.
Referenced by MultModM().