Scroll to navigation

std::subtract_with_carry_engine(3) C++ Standard Libary std::subtract_with_carry_engine(3)

NAME

std::subtract_with_carry_engine - std::subtract_with_carry_engine

Synopsis


Defined in header <random>
template<


class UIntType, (since C++11)
std::size_t w, std::size_t s, std::size_t r


> class subtract_with_carry_engine;


Is a random number engine that uses subtract with carry algorithm.


The state of a subtract_with_carry_engine consists of a sequence \(\small{\{ X_i\}(0
\le i <r)}\){X
i} (0 ≤ i <r), every \(\small{X_i}\)X
i is in interval \(\small{[0, 2^w)}\)[0, 2w
).


Let all subscripts applied to sequence be taken modulo r, c be the carry value which
is either 0 or 1. The state transition is performed as follows:


* let \(\small{Y=X_{i-s}-X_{i-r}-c}\)Y=X
i-s-X
i-r-c,
* set \(\small{X_i}\)X
i to \(\small{Y \mod 2^w}\)Y mod 2w
,
* set c to 1, if \(\small{Y<0}\)Y<0, to 0 otherwise.


The following typedefs define the random number engine with two commonly used
parameter sets:


Defined in header <random>
Type Definition
ranlux24_base(C++11) std::subtract_with_carry_engine<std::uint_fast32_t, 24, 10, 24>
ranlux48_base(C++11) std::subtract_with_carry_engine<std::uint_fast64_t, 48, 5, 12>

Template parameters


The result type generated by the generator. The effect is undefined if
UIntType - this is not one of unsigned short, unsigned int, unsigned long, or
unsigned long long.
w - The word size, in bits, of the state sequence, 10 < w <=
std::numeric_limits<UIntType>::digits.
s - The short lag.
r - The long lag, where 0 < s < r.

Member types


Member type Definition
result_type (C++11) The integral type generated by the engine. Results are undefined
if this is not an unsigned integral type.

Member functions

Construction and Seeding


constructor constructs the engine
(C++11) (public member function)
seed sets the current state of the engine
(C++11) (public member function)

Generation


operator() advances the engine's state and returns the generated value
(C++11) (public member function)
discard advances the engine's state by a specified amount
(C++11) (public member function)

Characteristics


min gets the smallest possible value in the output range
[static] (C++11) (public static member function)
max gets the largest possible value in the output range
[static] (C++11) (public static member function)

Non-member functions


operator== compares the internal states of two pseudo-random number
operator!= engines
(C++11) (function)
(C++11)(removed in C++20)
operator<< performs stream input and output on pseudo-random number
operator>> engine
(C++11) (function template)

Member constants


constexpr size_t word_size template parameter w, the word size
[static] (C++11) (public static member constant)
constexpr size_t short_lag template parameter s, the short lag
[static] (C++11) (public static member constant)
constexpr size_t long_lag template parameter r, the long lag
[static] (C++11) (public static member constant)
constexpr UIntType default_seed constant value 19780503u
[static] (C++11) (public static member constant)

2022.07.31 http://cppreference.com