A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
rng-stream.h
Go to the documentation of this file.
1//
2// Copyright (C) 2001 Pierre L'Ecuyer (lecuyer@iro.umontreal.ca)
3//
4// SPDX-License-Identifier: GPL-2.0-only
5//
6// Modified for ns-3 by: Rajib Bhattacharjea<raj.b@gatech.edu>
7
8#ifndef RNGSTREAM_H
9#define RNGSTREAM_H
10#include <stdint.h>
11#include <string>
12
13/**
14 * @file
15 * @ingroup rngimpl
16 * ns3::RngStream declaration.
17 */
18
19namespace ns3
20{
21
22/**
23 * @ingroup randomvariable
24 * @defgroup rngimpl RNG Implementation
25 */
26
27/**
28 * @ingroup rngimpl
29 *
30 * @brief Combined Multiple-Recursive Generator MRG32k3a
31 *
32 * This class is the combined multiple-recursive random number
33 * generator called MRG32k3a. The ns3::RandomVariableBase class
34 * holds a static instance of this class. The details of this
35 * class are explained in:
36 * http://www.iro.umontreal.ca/~lecuyer/myftp/papers/streams00.pdf
37 */
39{
40 public:
41 /**
42 * Construct from explicit seed, stream and substream values.
43 *
44 * @param [in] seed The starting seed.
45 * @param [in] stream The stream number.
46 * @param [in] substream The sub-stream number.
47 */
48 RngStream(uint32_t seed, uint64_t stream, uint64_t substream);
49 /**
50 * Copy constructor.
51 *
52 * @param [in] r The RngStream to copy.
53 */
54 RngStream(const RngStream& r);
55 /**
56 * Generate the next random number for this stream.
57 * Uniformly distributed between 0 and 1.
58 *
59 * @returns The next random.
60 */
61 double RandU01();
62
63 private:
64 /**
65 * Advance \pname{state} of the RNG by leaps and bounds.
66 *
67 * @param [in] nth The stream or substream index.
68 * @param [in] by The log2 base of \pname{nth}.
69 * @param [in] state The state vector to advance.
70 */
71 void AdvanceNthBy(uint64_t nth, int by, double state[6]);
72
73 /** The RNG state vector. */
74 double m_currentState[6];
75};
76
77} // namespace ns3
78
79#endif
Combined Multiple-Recursive Generator MRG32k3a.
Definition rng-stream.h:39
double m_currentState[6]
The RNG state vector.
Definition rng-stream.h:74
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.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
Every class exported by the ns3 library is enclosed in the ns3 namespace.