linear_congruential_engine-Klasse
Generiert eine zufällige Sequenz mithilfe des linearen Kongruenzalgorithmus.
Syntax
class linear_congruential_engine{
public: // types
typedef UIntType result_type;
// engine characteristics
static constexpr result_type multiplier = a;
static constexpr result_type increment = c;
static constexpr result_type modulus = m;
static constexpr result_type min() { return c == 0u 1u: 0u; }
static constexpr result_type max() { return m - 1u; }
static constexpr result_type default_seed = 1u;
// constructors and seeding functions
explicit linear_congruential_engine(result_type s = default_seed);
template <class Sseq>
explicit linear_congruential_engine(Sseq& q);
void seed(result_type s = default_seed);
template <class Sseq>
void seed(Sseq& q);
// generating functions
result_type operator()();
void discard(unsigned long long z);
};
Parameter
UIntType
Der unsigned integer-Ergebnistyp. Mögliche Typen finden Sie unter <"zufällig>".
A
Multiplikator. Vorbedingung: Siehe Abschnitt „Hinweise“.
C
Inkrement. Vorbedingung: Siehe Abschnitt „Hinweise“.
M
Modulo. Vorbedingung: Siehe Abschnitt „Hinweise“.
Member
linear_congruential_engine::linear_congruential_engine
linear_congruential_engine::discard
linear_congruential_engine::max
linear_congruential_engine::min
linear_congruential_engine::operator()
linear_congruential_engine::seed
default_seed
ist eine als 1u
definierte Memberkonstante, die als Standardparameterwert für linear_congruential_engine::seed
und den Einzelwertkonstruktor verwendet wird.
Weitere Informationen zu Modulmitgliedern finden Sie unter <"zufällig>".
Hinweise
Die linear_congruential_engine
Klassenvorlage ist das einfachste Generatormodul, aber nicht die schnellste oder höchste Qualität. substract_with_carry_engine ist gegenüber diesem Modul eine Verbesserung. Keines dieser Module ist so schnell oder gibt so hochqualitative Ergebnisse zurück wie mersenne_twister_engine.
Diese Engine produziert Werte eines benutzerdefinierten Ganzzahltyps ohne Vorzeichen mithilfe der Wiederholungsrelation (period) x(i) = (A * x(i-1) + C) mod M
.
Wenn M null ist, lautet numeric_limits<result_type>::max() + 1
der für diesen Modulus-Vorgang verwendete Wert . Der Zustand der Engine ist der letzte zurückgegebene Wert oder der Startwert, wenn operator()
nicht aufgerufen wurde.
Wenn M nicht null ist, müssen die Werte der Vorlagenargumente A und C kleiner als M sein.
Obwohl Sie direkt aus dieser Engine einen Generator konstruieren können, können Sie auch eine dieser voreingestellten Typdefinitionen verwenden.
minstd_rand0
: 1988 minimal standard engine (Lewis, Goodman und Miller, 1969).
typedef linear_congruential_engine<unsigned int, 16807, 0, 2147483647> minstd_rand0;
minstd_rand
: Updated minimal standard engine minstd_rand0
(Park, Miller und Stockmeyer, 1993).
typedef linear_congruential_engine<unsigned int, 48271, 0, 2147483647> minstd_rand;
Ausführliche Informationen über den Algorithmus für die lineare Kongruenz-Engine, erhalten Sie im Wikipedia-Artikel Linearer Kongruenzgenerator.
Anforderungen
Header:<random>
Namespace: std