table of contents
std::subtract_with_carry_engine::subtract_with_carry_engine(3) | C++ Standard Libary | std::subtract_with_carry_engine::subtract_with_carry_engine(3) |
NAME¶
std::subtract_with_carry_engine::subtract_with_carry_engine - std::subtract_with_carry_engine::subtract_with_carry_engine
Synopsis¶
subtract_with_carry_engine() : (1) (since C++11)
subtract_with_carry_engine(0u) {}
explicit subtract_with_carry_engine( result_type value ); (2)
(since C++11)
template< class SeedSeq > (3) (since C++11)
explicit subtract_with_carry_engine( SeedSeq& seq );
subtract_with_carry_engine( const (4) (since C++11)
subtract_with_carry_engine& other ); (implicitly declared)
Constructs the pseudo-random number engine.
1) The default constructor.
2) Constructs the engine with a seed value value. The sequence X of the
engine's
initial state is determined as follows:
1. Constructs a std::linear_congruential_engine<std::uint_least32_t,
40014u, 0u,
2147483563u> object e with argument value == 0u ? default_seed : value.
2. Let n be std::size_t(w / 32) + 1.
3. Sets the values of \(X_{-r}\)X
-r, ..., \(X_{-1}\)X
-1, in that order. Each value \(X_i\)X
i is set as specified below:
1. Successively calls e for n times, the return values are denoted as
\(z_0\)z
0 ... \(z_{n-1}\)z
n-1.
2. Sets \(X_i\)X
i to \((\sum^{n-1}_{j=0} z_j \cdot 2^{32j}) \mod m\)(∑n-1
j=0 z
j·232j
) mod m.
If \(X_{-1}\)X
-1 is 0, sets the carry value c of the engine's initial state to 1.
Otherwise, sets
c to 0.
3) Constructs the engine with a seed sequence seq. Given std::size_t(w / 32)
+ 1 as
k, the sequence X of the engine's initial state is determined as follows:
1. Creates an invented array object a of length r * k.
2. Calls seq.generate(a + 0, a + r * k).
3. For each integer i in [-r, -1], sets \(X_{i}\)X
i to \((\sum^{k-1}_{j=0} a_{k(i+r)+j} \cdot 2^{32j}) \mod m\)(∑k-1
j=0 a
k(i+r)+j·232j
) mod m.
If \(X_{-1}\)X
-1 is 0, sets the carry value c of the engine's initial state to 1.
Otherwise, sets
c to 0.
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) (std::size_t(w / 32) + 1) * r invocations of e.
3) Same as the complexity of the seq.generate call.
4) \(\small{O(r)}\)O(r).
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 3809 C++11 e could not be constructed if e can be constructed in
result_type is std::uint16_t this case
P0935R0 C++11 the default constructor was explicit made implicit
See also¶
seed sets the current state of the engine
(C++11) (public member function)
2024.06.10 | http://cppreference.com |