std::linear_congruential_engine<UIntType,a,c,m>::linear_congruential_engine
From cppreference.com
< cpp | numeric | random | linear congruential engine
linear_congruential_engine(
)
: linear_congruential_engine(default_seed)
{
}
|
(1) | (since C++11) |
explicit linear_congruential_engine( result_type value ); |
(2) | (since C++11) |
template
<
class SeedSeq >
explicit linear_congruential_engine( SeedSeq& seq ) ; |
(3) | (since C++11) |
linear_congruential_engine( const linear_congruential_engine& other );
|
(4) | (since C++11) (implicitly declared) |
Constructs the pseudo-random number engine.
1) The default constructor.
- If the default-constructed engine is of type
std::minstd_rand0
, the 10000th consecutive invocation of it produces the value 1043618065 - If the default-constructed engine is of type
std::minstd_rand
, the 10000th consecutive invocation of it produces the value 399268537
2) Constructs the engine with a seed value value. The engine's initial state is determined as follows:
- If c % m == 0 and value % m == 0 are both true, the state is 1
- Otherwise, the state is value % m.
3) Constructs the engine with a seed sequence seq. Given
std::size_t
(
std::log2
(m)
/
32
)
+
1
as k, the engine's initial state is determined as follows:
- Creates an invented array object a of length k + 3
- Calls seq.generate (a + 0, a + k + 3 )
- Let S be
(∑k-1
j=0 aj+3·232j
) mod m - If both c % m == 0 and S == 0 are true, sets the engine's state to 1. Otherwise, sets the engine’s state to S
This overload participates in overload resolution only if
SeedSeq
meets the requirements of SeedSequence
4) The copy constructor. Upon construction, *this == other is true
Parameters
value | - | seed value to use in the initialization of the internal state |
seq | - | seed sequence to use in the initialization of the internal state |
Complexity
1,2) Constant.
3) Same as the complexity of the
seq.generate
call.4) Constant.
Exceptions
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2181 | C++11 | overload (3) would not throw even if the seq.generate call throws
|
propagates the exception |
P0935R0 | C++11 | the default constructor was explicit | made implicit |
See also
sets the current state of the engine (public member function) |