C++ benannte Anforderungen: RandomNumberEngine (seit C++11)
Eine Zufallszahlmaschine ist ein Funktionsoperator, der vorzeichenlose Ganzzahlen zurückgibt, wobei jeder Wert im Bereich der möglichen Ergebnisse (idealerweise) die gleiche Wahrscheinlichkeit hat.
Jede Zufallszahlmaschine ist auch ein UniformRandomBitGenerator und kann daher in jede Zufallszahlverteilung eingefügt werden, um eine Zufallszahl (formal ein Zufallsvariate) zu erhalten.
[bearbeiten] Anforderungen
Ein Typ erfüllt RandomNumberEngine, wenn er UniformRandomBitGenerator erfüllt und unter Berücksichtigung der folgenden Typen und Werte die semantischen und Komplexitätsanforderungen in der untenstehenden Tabelle erfüllt sind.
| Typ | Definition |
E
|
ein RandomNumberEngine Typ |
T
|
E::result_type
|
| Wert | Definition |
| e | ein Wert vom Typ E |
| v | ein L-Wert vom Typ E |
| x, y | Werte vom Typ (möglicherweise const-qualifiziert) E |
| s | ein Wert vom Typ T |
| q | ein SeedSequence L-Wert |
| z | ein Wert vom Typ unsigned long long |
| os | ein L-Wert, dessen Typ eine Spezialisierung von std::basic_ostream ist |
| ist | ein L-Wert, 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 Maschine mit dem gleichen Anfangszustand wie alle anderen standardkonstruierten Maschinen vom Typ E. |
O(n) |
| E(x) | Erzeugt eine Maschine, die gleich x ist. | O(n) | |
| E(s) | Erzeugt eine Maschine, deren Anfangszustand durch s bestimmt wird. | O(n) | |
| E(q) | Erzeugt eine Maschine, deren Anfangszustand durch einen einzelnen Aufruf von q.generate bestimmt wird. |
gleich der Komplexität von q.generate, aufgerufen für eine Sequenz der Länge n | |
| e.seed() | void | Nachbedingung: e == E(). | gleich E() |
| e.seed(s) | void | Nachbedingung: e == E(s). | gleich E(s) |
| e.seed(q) | void | Nachbedingung: e == E(q). | gleich E(q) |
| e() | T
|
Verschiebt den Zustand von e von ei nach ei+1 (d. h. TA(ei)) und gibt GA(ei) zurück. |
amortisiert konstant |
| e.discard(z) | void | Verschiebt den Zustand von e von ei nach ei+z 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 die i-ten aufeinanderfolgenden Aufrufe von x() und y() denselben Wert zurückgeben, wird true zurückgegeben. Andernfalls wird false zurückgegeben. | O(n) |
| x != y | bool | !(x == y) | O(n) |
| os << x | decltype(os)& | Mit auf std::ios_base::dec | std::ios_base::left eingestellten fmtflags und dem Leerzeichen als Füllzeichen wird die Textdarstellung des aktuellen Zustands von x in os geschrieben. Nachbedingung: Die fmtflags von os und das Füllzeichen sind dieselben wie zuvor. |
O(n) |
| ist >> v | decltype(is)& | Mit auf std::ios_base::dec eingestellten fmtflags wird die Textdarstellung des aktuellen Zustands von v aus is gelesen. Wenn fehlerhafte Eingaben auftreten, wird sichergestellt, dass der Zustand von v durch die Operation unverändert bleibt, und is.setstate(std::ios_base::failbit) aufgerufen (was std::ios_base::failure auslösen kann). Vorbedingung: is liefert eine Textdarstellung, die zuvor mit einem Ausgabestrom pr geschrieben wurde, der alle folgenden Bedingungen erfüllt.
Nachbedingung: Die fmtflags von is sind dieselben wie zuvor. |
O(n) |
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliotheksfunktionen erfüllen RandomNumberEngine.
| (C++11) |
implementiert den linearen Kongruenzgenerator-Algorithmus (Klassenschablone) |
| (C++11) |
implementiert den Mersenne-Twister-Algorithmus (Klassenschablone) |
| (C++11) |
implementiert einen Subtraktions-mit-Übertrag- (verzögerten Fibonacci)-Algorithmus (Klassenschablone) |
| (C++26) |
ein zähler-basierter, parallelisierbarer Generator (Klassenschablone) |
| (C++11) |
verwirft einige Ausgaben eines Zufallszahlengenerators (Klassenschablone) |
| (C++11) |
packt die Ausgabe eines Zufallszahlengenerators in Blöcke einer bestimmten Anzahl von Bits (Klassenschablone) |
| (C++11) |
liefert die Ausgabe eines Zufallszahlengenerators in einer anderen Reihenfolge (Klassenschablone) |
Die folgenden Standardbibliotheksfunktionen erfüllen UniformRandomBitGenerator, aber nicht RandomNumberEngine.
| (C++11) |
nicht-deterministischer Zufallszahlengenerator mit Hardware-Entropiequelle (Klasse) |