std::subtract_with_carry_engine
| Defined in header  <random> | ||
| template<     class UIntType, | (since C++11) | |
Is a random number engine that uses subtract with carry algorithm.
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. | 
| w | - | the word size, in bits, of the state sequence | 
| s | - | the short lag | 
| r | - | the long lag | 
If w is not in [1, std::numeric_limits<UIntType>::digits], or s is not in [1, r), the program is ill-formed.
Generator properties
The size of the states of subtract_with_carry_engine is O(r), each of them consists of two parts:
-  A sequence X of r integer values, where each value is in [0,2w).
- An integer c (known as the carry ), whose value is either 0 or 1.
Given that X
j stands for the j mod rth value (starting from 0) of X, the transition algorithm of subtract_with_carry_engine (TA(x
i)) is defined as follows:
-  Let Y be X
 i-s-X
 i-r-c.
-  Let y be Y mod 2w
 , and set X
 i to y.
- If Y is negative, set c to 1, otherwise set c to 0.
The generation algorithm of subtract_with_carry_engine is GA(x
i) = y, where y is the value produced in step 2 of the transition algorithm.
Predefined specializations
The following specializations 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> | 
Nested types
| Type | Definition | 
| result_type | UIntType | 
Data members
| constexpr std::size_t word_size [static] | w (public static member constant) | 
| constexpr std::size_t short_lag [static] | s (public static member constant) | 
| constexpr std::size_t long_lag [static] | r (public static member constant) | 
| constexpr std::uint_least32_t default_seed [static] | 19780503u (public static member constant) | 
Member functions
| Construction and Seeding | |
| (C++11) | constructs the engine (public member function) | 
| (C++11) | sets the current state of the engine (public member function) | 
| Generation | |
| (C++11) | advances the engine's state and returns the generated value (public member function) | 
| (C++11) | advances the engine's state by a specified amount (public member function) | 
| Characteristics | |
| [static] (C++11) | gets the smallest possible value in the output range (public static member function) | 
| [static] (C++11) | 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 | 
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 | default_seedmight not berepresentable with result_type | changed its type to std::uint_least32_t |