std::mersenne_twister_engine
| Definiert in Header <random> |
||
| template< class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r, |
(seit C++11) | |
mersenne_twister_engine ist eine Zufallszahlenerzeugungs-Engine, die auf dem Mersenne-Twister-Algorithmus basiert. Sie erzeugt qualitativ hochwertige, aber nicht kryptographisch sichere, vorzeichenlose Ganzzahl-Zufallszahlen vom Typ UIntType im Intervall [0, 2w
).
Inhalt |
[edit] Template-Parameter
| UIntType | - | Der vom Generator erzeugte Ergebnistyp. Das Verhalten ist undefiniert, wenn dies nicht einer der folgenden Typen ist: unsigned short, unsigned int, unsigned long oder unsigned long long. |
| w | - | die Potenz von zwei, die den Wertebereich bestimmt, der von der Engine erzeugt wird |
| n | - | der Grad der Rekurrenz |
| m | - | das mittlere Wort, ein Offset, der in der Rekurrenzrelation für den Zustand verwendet wird |
| r | - | die Anzahl der Bits der unteren Bitmaske, auch bekannt als Twist-Wert |
| a | - | die bedingte XOR-Maske, d.h. die Koeffizienten der rationalen Normalform-Twist-Matrix |
| u, d, s, b, t, c, l | - | die 1. bis 7. Komponente der Bit-Scrambling-Matrix (Tempering) |
| f | - | der Initialisierungsmultiplikator |
Wenn eine der folgenden Einschränkungen verletzt wird, ist das Programm fehlerhaft (ill-formed).
- m liegt in
[1,n]. - Die folgenden Ausdrücke sind alle true
- w >= 3
- w >= r
- w >= u
- w >= s
- w >= t
- w >= l
- w <= std::numeric_limits<UIntType>::digits
- Gegeben (1u << w) - 1u als w1, sind die folgenden Ausdrücke alle true
- a <= w1
- b <= w1
- c <= w1
- d <= w1
- f <= w1
[edit] Generatoreigenschaften
Die Größe der Zustände von mersenne_twister_engine ist n, wobei jeder Zustand aus einer Sequenz X von n Werten vom Typ result_type besteht. Xj steht für den j mod n-ten Wert (beginnend bei 0) von X.
Gegeben die folgenden Notationen für bitweise Operationen:
- bitand, integriertes bitweises AND.
- xor, integriertes bitweises XOR.
- lshift, integriertes bitweises Linksshift.
- rshift, integriertes bitweises Rechtsshift.
Der Übergangsalgorithmus von mersenne_twister_engine (TA(xi)) ist wie folgt definiert:
- Verketten Sie die oberen w - r Bits von Xi-n mit den unteren r Bits von Xi+1-n, um einen vorzeichenlosen Ganzzahlwert Y zu erhalten.
- Setze y auf a·(Y bitand 1) und setze Xi auf Xi+m−n xor (Y rshift 1) xor y.
Der Generierungsalgorithmus von mersenne_twister_engine (GA(xi)) ist wie folgt definiert:
- Setze z1 auf Xi xor ((Xi rshift u) bitand d).
- Setze z2 auf Xi xor (((Xi lshift s) mod 2w
) bitand b). - Setze z3 auf Xi xor (((Xi lshift t) mod 2w
) bitand c). - Setze z4 auf z3 xor (z3 rshift l).
- Gib z4 als Ergebnis zurück (d.h. GA(xi)=z4).
[edit] Vordefinierte Spezialisierungen
Die folgenden Spezialisierungen definieren die Zufallszahl-Engine mit zwei häufig verwendeten Parametersätzen:
| Definiert in Header
<random> | |
| Typ | Definition |
mt19937 (C++11) |
std::mersenne_twister_engine<std::uint_fast32_t, |
mt19937_64 (C++11) |
std::mersenne_twister_engine<std::uint_fast64_t, |
[edit] Verschachtelte Typen
| Typ | Definition |
result_type
|
UIntType
|
[edit] Datenelemente
| constexpr size_t word_size [static] |
w (öffentliche statische Member-Konstante) |
| constexpr size_t state_size [static] |
n (öffentliche statische Member-Konstante) |
| constexpr size_t shift_size [static] |
m (öffentliche statische Member-Konstante) |
| constexpr size_t mask_bits [static] |
r (öffentliche statische Member-Konstante) |
| constexpr UIntType xor_mask [static] |
a (öffentliche statische Member-Konstante) |
| constexpr size_t tempering_u [static] |
u (öffentliche statische Member-Konstante) |
| constexpr UIntType tempering_d [static] |
d (öffentliche statische Member-Konstante) |
| constexpr size_t tempering_s [static] |
s (öffentliche statische Member-Konstante) |
| constexpr UIntType tempering_b [static] |
b (öffentliche statische Member-Konstante) |
| constexpr size_t tempering_t [static] |
t (öffentliche statische Member-Konstante) |
| constexpr UIntType tempering_c [static] |
c (öffentliche statische Member-Konstante) |
| constexpr size_t tempering_l [static] |
l (öffentliche statische Member-Konstante) |
| constexpr UIntType initialization_multiplier [static] |
f (öffentliche statische Member-Konstante) |
| constexpr UIntType default_seed [static] |
5489u (öffentliche statische Member-Konstante) |
[edit] Memberfunktionen
Konstruktion und Initialisierung | |
| konstruiert die Engine (public member function) [[Bearbeiten]] | |
| setzt den aktuellen Zustand der Engine (public member function) [[Bearbeiten]] | |
Generierung | |
| verschiebt den Zustand der Engine und gibt den generierten Wert zurück (public member function) [[Bearbeiten]] | |
| verschiebt den Zustand der Engine um einen angegebenen Betrag (public member function) [[Bearbeiten]] | |
Eigenschaften des Generators | |
| [static] |
liefert den kleinstmöglichen Wert im Ausgabebereich (public static member function) [[Bearbeiten]] |
| [static] |
liefert den größtmöglichen Wert im Ausgabebereich (public static member function) [[Bearbeiten]] |
[edit] Nicht-Memberfunktionen
| (C++11)(C++11)(entfernt in C++20) |
vergleicht die internen Zustände zweier Pseudozufallszahlengeneratoren (function) |
| (C++11) |
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlengeneratoren durch (function template) |
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |