std:: linear_congruential_engine
Defined in header
<random>
|
||
template
<
class
UIntType,
|
(since C++11) | |
linear_congruential_engine
is a random number engine based on
Linear congruential generator
(LCG).
Template parameters
UIntType | - | The result type generated by the generator. The effect is undefined if this is not one of unsigned short , unsigned int , unsigned long , or unsigned long long . |
a | - | the multiplier term |
c | - | the increment term |
m | - | the modulus term |
When m is not zero, if a >= m or c >= m is true , the program is ill-formed.
Generator properties
The
size
of the states of
linear_congruential_engine
is
1
, each of them consists of a single integer.
The actual modulus m 0 is defined as follows:
- If m is not zero, m 0 is m .
-
If
m
is zero,
m
0
is the value of
std::
numeric_limits
<
result_type
>
::
max
(
)
plus
1
(which means
m
0
need not be representable as
result_type
).
The
transition algorithm
of
linear_congruential_engine
is
TA(x
i
) = (a·x
i
+c) mod m
0
.
The
generation algorithm
of
linear_congruential_engine
is
GA(x
i
) = (a·x
i
+c) mod m
0
.
The pseudo-random number generated with the current state is also the successor state.
Predefined specializations
The following specializations define the random number engine with two commonly used parameter sets:
Defined in header
<random>
|
|
Type | Definition |
minstd_rand0
(C++11)
|
std
::
linear_congruential_engine
<
std::
uint_fast32_t
,
16807
,
0
,
2147483647
>
Discovered in 1969 by Lewis, Goodman and Miller, adopted as "Minimal standard" in 1988 by Park and Miller |
minstd_rand
(C++11)
|
std
::
linear_congruential_engine
<
std::
uint_fast32_t
,
|
Nested types
Type | Definition |
result_type
|
UIntType
|
Data members
constexpr UIntType
multiplier
[static]
|
a
(public static member constant) |
constexpr UIntType
increment
[static]
|
c
(public static member constant) |
constexpr UIntType
modulus
[static]
|
m
(public static member constant) |
constexpr UIntType
default_seed
[static]
|
1u
(public static member constant) |
Member functions
Construction and Seeding |
|
constructs the engine
(public member function) |
|
sets the current state of the engine
(public member function) |
|
Generation |
|
advances the engine's state and returns the generated value
(public member function) |
|
advances the engine's state by a specified amount
(public member function) |
|
Characteristics |
|
[static]
|
gets the smallest possible value in the output range
(public static member function) |
[static]
|
gets the largest possible value in the output range
(public static member function) |
Non-member functions
(C++11)
(C++11)
(removed in C++20)
|
compares the internal states of two pseudo-random number engines
(function) |
(C++11)
|
performs stream input and output on pseudo-random number engine
(function template) |
Example
This section is incomplete
Reason: no example |