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 Zufallszahlen-Engine basierend auf dem
Mersenne-Twister
-Algorithmus. Sie erzeugt hochwertige, jedoch nicht kryptografisch sichere, vorzeichenlose Ganzzahl-Zufallszahlen des Typs
UIntType
im Intervall
[0, 2
w
)
.
Inhaltsverzeichnis |
Template-Parameter
| UIntType | - | Der vom Generator erzeugte Ergebnistyp. Das Verhalten ist undefiniert, wenn dies nicht einer von unsigned short , unsigned int , unsigned long , oder unsigned long long ist. |
| w | - | die Zweierpotenz, die den Wertebereich der vom Engine erzeugten Werte bestimmt |
| n | - | der Grad der Rekursion |
| m | - | das mittlere Wort, ein Offset, der in der den Zustand definierenden Rekursionsbeziehung 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 der Twist-Matrix |
| u, d, s, b, t, c, l | - | die 1. te bis 7. te Komponente der Bit-Scrambling (Tempering)-Matrix |
| f | - | der Initialisierungsmultiplikator |
Wenn eine der folgenden Einschränkungen verletzt wird, ist das Programm fehlerhaft:
-
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
Generatoreigenschaften
Die
Größe
der Zustände von
mersenne_twister_engine
beträgt
n
, wobei jeder aus einer Sequenz
X
von
n
Werten des Typs
result_type
besteht.
X
j
steht für den
j mod n
-ten Wert (beginnend bei 0) von
X
.
Gegeben die folgenden bitweisen Operationsnotationen:
- bitand , eingebauter bitweiser UND-Operator .
- xor , eingebauter bitweiser XOR-Operator .
- lshift , eingebauter bitweiser Linksschiebe-Operator .
- rshift , eingebauter bitweiser Rechtsschiebe-Operator .
Der
Übergangsalgorithmus
von
mersenne_twister_engine
(
TA(x
i
)
) ist wie folgt definiert:
- Verkette die oberen w - r Bits von X i-n mit den unteren r Bits von X i+1-n , um einen vorzeichenlosen Ganzzahlwert Y zu erhalten.
- Sei y gleich a·(Y bitand 1) , und setze X i auf X i+m−n xor (Y rshift 1) xor y .
Der
Generierungsalgorithmus
von
mersenne_twister_engine
(
GA(x
i
)
) ist wie folgt definiert:
- Sei z 1 gleich X i xor ((X i rshift u) bitand d) .
-
Sei
z
2
gleich
X
i
xor (((X
i
lshift s) mod 2
w
) bitand b) . -
Sei
z
3
gleich
X
i
xor (((X
i
lshift t) mod 2
w
) bitand c) . - Sei z 4 gleich z 3 xor (z 3 rshift l) .
- Liefere z 4 als Ergebnis (d.h. GA(x i )=z 4 ).
Vordefinierte Spezialisierungen
Die folgenden Spezialisierungen definieren die Zufallszahlen-Engine mit zwei häufig verwendeten Parametersätzen:
|
Definiert im 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
,
|
Verschachtelte Typen
| Typ | Definition |
result_type
|
UIntType
|
Datenmitglieder
|
constexpr size_t
Wortgröße
[static]
|
w
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Zustandsgröße
[static]
|
n
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Schiebeweite
[static]
|
m
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Maskenbits
[static]
|
r
(öffentliche statische Elementkonstante) |
|
constexpr UIntType
XOR-Maske
[static]
|
a
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Temperierung_u
[static]
|
u
(öffentliche statische Elementkonstante) |
|
constexpr UIntType
Temperierung_d
[static]
|
d
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Temperierung_s
[static]
|
s
(öffentliche statische Elementkonstante) |
|
constexpr UIntType
Temperierung_b
[static]
|
b
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Temperierung_t
[static]
|
t
(öffentliche statische Elementkonstante) |
|
constexpr UIntType
Temperierung_c
[static]
|
c
(öffentliche statische Elementkonstante) |
|
constexpr size_t
Temperierung_l
[static]
|
l
(öffentliche statische Elementkonstante) |
|
constexpr UIntType
Initialisierungsmultiplikator
[static]
|
f
(öffentliche statische Elementkonstante) |
|
constexpr UIntType
Standardstartwert
[static]
|
5489u
(öffentliche statische Elementkonstante) |
Memberfunktionen
Konstruktion und Initialisierung |
|
|
konstruiert die Engine
(öffentliche Elementfunktion) |
|
|
setzt den aktuellen Zustand der Engine
(öffentliche Elementfunktion) |
|
Generierung |
|
|
bewegt den Zustand der Engine vor und gibt den generierten Wert zurück
(öffentliche Elementfunktion) |
|
|
bewegt den Zustand der Engine um einen bestimmten Betrag vor
(öffentliche Elementfunktion) |
|
Eigenschaften |
|
|
[static]
|
ermittelt den kleinstmöglichen Wert im Ausgabebereich
(öffentliche statische Elementfunktion) |
|
[static]
|
ermittelt den größtmöglichen Wert im Ausgabebereich
(öffentliche statische Elementfunktion) |
Nicht-Member-Funktionen
|
(C++11)
(C++11)
(removed in C++20)
|
vergleicht die internen Zustände zweier Pseudozufallszahlengeneratoren
(Funktion) |
|
(C++11)
|
führt Stream-Eingabe und -Ausgabe auf Pseudozufallszahlengenerator durch
(Funktionstemplate) |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |