Defined in header <random>
    class UIntType, 
    std::size_t w, std::size_t s, std::size_t r
> class subtract_with_carry_engine;
(since C++11)

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
} (0 ≤ i <r), every \(\small{X_i}\)X
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
  • set \(\small{X_i}\)X
    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

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, 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
constructs the engine
(public member function)
sets the current state of the engine
(public member function)
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)
[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
performs stream input and output on pseudo-random number engine
(function template)

Member constants

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.