Scroll to navigation

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

NAME

std::linear_congruential_engine - std::linear_congruential_engine

Synopsis


Defined in header <random>
template<


class UIntType,
UIntType a, (since C++11)
UIntType c,
UIntType m


> class linear_congruential_engine;


linear_congruential_engine is a random number engine based on Linear congruential
generator (LCG).

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.
a - the multiplier term
c - the increment term
m - the modulus term


When m is not zero, if a >= m or c >= m is true, the program is ill-formed.


Generator properties


The size of the states of linear_congruential_engine is 1, each of them consists of
a single integer.


The actual modulus \(m_0\)m
0 is defined as follows:


* If m is not zero, \(m_0\)m
0 is m.
* If m is zero, \(m_0\)m
0 is the value of std::numeric_limits<result_type>::max() plus 1 (which means
\(m_0\)m
0 need not be representable as result_type).


The transition algorithm of linear_congruential_engine is \(TA(x_i) = (a \cdot x_i +
c)\mod m_0\)TA(x
i) = (a·x
i+c) mod m
0.


The generation algorithm of linear_congruential_engine is \(GA(x_i) = (a \cdot x_i +
c)\mod m_0\)GA(x
i) = (a·x
i+c) mod m
0.


The pseudo-random number generated with the current state is also the successor
state.


Predefined specializations


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


Defined in header <random>
Type Definition
std::linear_congruential_engine<std::uint_fast32_t,
minstd_rand0 16807, 0, 2147483647>
(C++11)
Discovered in 1969 by Lewis, Goodman and Miller, adopted as "Minimal
standard" in 1988 by Park and Miller
std::linear_congruential_engine<std::uint_fast32_t,
minstd_rand 48271, 0, 2147483647>
(C++11) Newer "Minimum standard", recommended by Park, Miller, and Stockmeyer
in 1993


Nested types


Type Definition
result_type UIntType


Data members


constexpr UIntType multiplier a
[static] (public static member constant)
constexpr UIntType increment c
[static] (public static member constant)
constexpr UIntType modulus m
[static] (public static member constant)
constexpr UIntType default_seed 1u
[static] (public static member constant)

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)

Example


This section is incomplete
Reason: no example

Category:


* Todo no example

2024.06.10 http://cppreference.com