C++ named requirements: RandomNumberEngine (since C++11)
Eine Zufallszahlen-Engine ist ein Funktionsobjekt, das vorzeichenlose Ganzzahlwerte zurückgibt, sodass jeder Wert im Bereich der möglichen Ergebnisse (im Idealfall) gleiche Wahrscheinlichkeit besitzt.
Jede Zufallszahlen-Engine ist auch ein UniformRandomBitGenerator und kann daher in jede Zufallszahlenverteilung eingebunden werden, um eine Zufallszahl (formal eine Zufallsvariable) zu erhalten.
Anforderungen
Ein Typ erfüllt RandomNumberEngine , wenn er UniformRandomBitGenerator erfüllt und, gegeben die folgenden Typen und Werte, die semantischen und Komplexitätsanforderungen in der nachstehenden Tabelle erfüllt sind:
| Typ | Definition |
E
|
ein RandomNumberEngine -Typ |
T
|
E::result_type
|
| Wert | Definition |
| e |
ein Wert vom Typ
E
|
| v |
ein Lvalue vom Typ
E
|
| x , y |
Werte vom Typ (möglicherweise const-qualifiziert)
E
|
| s |
ein Wert vom Typ
T
|
| q | ein SeedSequence -Lvalue |
| z | ein Wert vom Typ unsigned long long |
| os | ein Lvalue, dessen Typ eine Spezialisierung von std::basic_ostream ist |
| is | ein Lvalue, dessen Typ eine Spezialisierung von std::basic_istream ist |
| n |
die
Größe
des Zustands von
E
|
| TA |
der
Übergangsalgorithmus
von
E
|
| GA |
der
Generierungsalgorithmus
von
E
|
| Ausdruck | Rückgabetyp | Semantik | Komplexität |
|---|---|---|---|
| E ( ) | N/A |
Erzeugt eine Engine mit demselben Anfangszustand wie alle anderen standardmäßig konstruierten Engines vom Typ
E
.
|
O(n) |
| E ( x ) | Erzeugt eine Engine, die gleich x ist. | O(n) | |
| E ( s ) | Erstellt eine Engine, deren Ausgangszustand durch s bestimmt wird. | O(n) | |
| E ( q ) |
Erzeugt eine Engine, deren Anfangszustand durch einen einzelnen Aufruf von
q.generate
bestimmt wird.
|
identisch mit der Komplexität von
q.generate
aufgerufen auf einer Sequenz der Länge
n
|
|
| e. seed ( ) | void | Nachbedingung: e == E ( ) . | gleich wie E ( ) |
| e. seed ( s ) | void | Nachbedingung: e == E ( s ) . | gleich wie E ( s ) |
| e. seed ( q ) | void | Nachbedingung: e == E ( q ) . | gleich wie E ( q ) |
| e ( ) |
T
|
Setzt den Zustand von
e
von
e
i
auf
e
i+1
fort (d.h.
TA
(
e
i
)
) und gibt
GA
(
e
i
)
zurück.
|
amortisiert konstant |
| e. discard ( z ) | void |
Setzt den Zustand von
e
von
e
i
auf
e
i+z
fort, auf eine Weise, die äquivalent zu
z
aufeinanderfolgenden Aufrufen von
e
(
)
ist.
|
nicht schlechter als die Komplexität von z aufeinanderfolgenden Aufrufen von e ( ) |
| x == y | bool | Für alle positiven ganzen Zahlen i , wenn der i -te aufeinanderfolgende Aufruf von x ( ) und y ( ) denselben Wert zurückgibt, wird true zurückgegeben. Andernfalls wird false zurückgegeben. | O(n) |
| x ! = y | bool | ! ( x == y ) | O(n) |
| os << x | decltype ( os ) & |
Mit gesetzten fmtflags auf
std::
ios_base
::
dec
|
std::
ios_base
::
left
und dem Füllzeichen gesetzt auf das Leerzeichen, schreibt in
os
die textuelle Darstellung des aktuellen Zustands von
x
.
Nachbedingung: os 's fmtflags und das Füllzeichen sind dieselben wie zuvor. |
O(n) |
| is >> v | decltype ( is ) & |
Mit fmtflags gesetzt auf
std::
ios_base
::
dec
, liest von
is
die textuelle Darstellung des aktuellen Zustands von
v
. Bei ungültiger Eingabe wird sichergestellt, dass der Zustand von
v
durch den Vorgang unverändert bleibt und
is.
setstate
(
std::
ios_base
::
failbit
)
aufgerufen (was
std::ios_base::failure
auslösen kann).
Vorbedingung: is stellt eine textuelle Darstellung bereit, die zuvor mit einem Ausgabestream pr geschrieben wurde, der alle folgenden Bedingungen erfüllt:
Nachbedingung: Die fmtflags von is sind dieselben wie zuvor. |
O(n) |
Standardbibliothek
Die folgenden Standardbibliothekseinrichtungen erfüllen RandomNumberEngine :
|
(C++11)
|
implementiert den
linearen Kongruenzgenerator
Algorithmus
(Klassentemplate) |
|
(C++11)
|
implementiert den
Mersenne-Twister
Algorithmus
(Klassentemplate) |
|
(C++11)
|
implementiert einen Subtract-with-Carry (
verzögerten Fibonacci
) Algorithmus
(Klassentemplate) |
|
(C++26)
|
ein zählerbasierter parallelisierbarer Generator
(Klassentemplate) |
|
(C++11)
|
verwirft einen Teil der Ausgabe einer Zufallszahlen-Engine
(Klassentemplate) |
|
(C++11)
|
packt die Ausgabe einer Zufallszahlen-Engine in Blöcke mit einer bestimmten Bitanzahl
(Klassentemplate) |
|
(C++11)
|
liefert die Ausgabe einer Zufallszahlen-Engine in einer anderen Reihenfolge
(Klassentemplate) |
Die folgenden Standardbibliothekseinrichtungen erfüllen UniformRandomBitGenerator aber nicht RandomNumberEngine :
|
(C++11)
|
Nicht-deterministischer Zufallszahlengenerator unter Verwendung einer Hardware-Entropiequelle
(Klasse) |