49const double m1   =       4294967087.0;
 
   52const double m2   =       4294944443.0;
 
   58const double a12  =       1403580.0;
 
   61const double a13n =       810728.0;
 
   64const double a21  =       527612.0;
 
   67const double a23n =       1370589.0;
 
   73const double two53 =      9007199254740992.0;
 
   79  { -810728.0,  1403580.0,       0.0 }
 
 
   86  { -1370589.0,        0.0,  527612.0 }
 
 
  103double MultModM (
double a, 
double s, 
double c, 
double m)
 
  115      a1 = 
static_cast<int32_t> (v / m);
 
  117      v = v * 
two17 + a * s + c;
 
  120  a1 = 
static_cast<int32_t> (v / m);
 
  122  if ((v -= a1 * m) < 0.0)
 
 
  149  for (i = 0; i < 3; ++i)
 
  151      x[i] = 
MultModM (A[i][0], s[0], 0.0, m);
 
  152      x[i] = 
MultModM (A[i][1], s[1], x[i], m);
 
  153      x[i] = 
MultModM (A[i][2], s[2], x[i], m);
 
  155  for (i = 0; i < 3; ++i)
 
 
  180  for (i = 0; i < 3; ++i)
 
  182      for (j = 0; j < 3; ++j)
 
  187      for (j = 0; j < 3; ++j)
 
  192  for (i = 0; i < 3; ++i)
 
  194      for (j = 0; j < 3; ++j)
 
 
  217  for (i = 0; i < 3; ++i)
 
  219      for (j = 0; j < 3; ++j)
 
  221          dst[i][j] = src[i][j];
 
  225  for (i = 0; i < e; i++)
 
 
  248  for (i = 0; i < 3; ++i)
 
  250      for (j = 0; j < 3; ++j)
 
  256  for (j = 0; j < 3; ++j)
 
 
  292  for (
int i = 0; i < 190; i++)
 
  298  return precalculated;
 
 
  310  for (
int i = 0; i < 3; i ++)
 
  312      for (
int j = 0; j < 3; j++)
 
  314          a1p[i][j] = constants.
a1[n-1][i][j];
 
  315          a2p[i][j] = constants.
a2[n-1][i][j];
 
 
 
  369    if (seedNumber >= 
m1 || seedNumber >= 
m2 || seedNumber == 0)
 
  373    for (
int i = 0; i < 6; ++i)
 
 
  383    for (
int i = 0; i < 6; ++i)
 
 
  394    for (
int i = 0; i < 64; i++)
 
  397        int bit = (nth >> nbit) & 0x1;
 
 
Combined Multiple-Recursive Generator MRG32k3a.
RngStream(uint32_t seed, uint64_t stream, uint64_t substream)
Construct from explicit seed, stream and substream values.
double m_currentState[6]
The RNG state vector.
void AdvanceNthBy(uint64_t nth, int by, double state[6])
Advance state of the RNG by leaps and bounds.
double RandU01()
Generate the next random number for this stream.
NS_FATAL_x macro definitions.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Namespace for MRG32k3a implementation details.
const double a21
Second component multiplier of n - 1 value.
const double m1
First component modulus, 232 - 209.
void MatMatModM(const Matrix A, const Matrix B, Matrix C, double m)
Compute the matrix C = A*B MOD m.
const Matrix A1p0
First component transition matrix.
const double a23n
Second component multiplier of n - 3 value.
const double two17
Decomposition factor for computing a*s in less than 53 bits, 217
void PowerOfTwoMatrix(int n, Matrix a1p, Matrix a2p)
Get the transition matrices raised to a power of 2.
const double norm
Normalization to obtain randoms on [0,1).
const double a12
First component multiplier of n - 2 value.
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.
const Matrix A2p0
Second component transition matrix.
double Matrix[3][3]
Type for 3x3 matrix of doubles.
const double m2
Second component modulus, 232 - 22853.
const double a13n
First component multiplier of n - 3 value.
const double two53
IEEE-754 floating point precision, 253
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.
void MatVecModM(const Matrix A, const double s[3], double v[3], double m)
Compute the vector v = A*s MOD m.
Precalculated PowerOfTwoConstants()
Compute the transition matrices of the two MRG components raised to all powers of 2 from 1 to 191.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::RngStream declaration.
The transition matrices of the two MRG components (in matrix form), raised to all powers of 2 from 1 ...
Matrix a1[190]
First component transition matrix powers.
Matrix a2[190]
Second component transition matrix powers.