Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: RandomNumberEngine (seit C++11)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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.

  • is.getloc() == pr.getloc() ist true.
  • std::is_same<decltype(is)::char_type,
                 decltype(pr)::char_type>::value
    ist true.
  • std::is_same<decltype(is)::traits_type,
                 decltype(pr)::traits_type>::value
    ist true.

Nachbedingung: Die fmtflags von is sind dieselben wie zuvor.

O(n)

[bearbeiten] Standardbibliothek

Die folgenden Standardbibliotheksfunktionen erfüllen RandomNumberEngine.

implementiert den linearen Kongruenzgenerator-Algorithmus
(Klassenschablone) [bearbeiten]
implementiert den Mersenne-Twister-Algorithmus
(Klassenschablone) [bearbeiten]
implementiert einen Subtraktions-mit-Übertrag- (verzögerten Fibonacci)-Algorithmus
(Klassenschablone) [bearbeiten]
ein zähler-basierter, parallelisierbarer Generator
(Klassenschablone) [bearbeiten]
verwirft einige Ausgaben eines Zufallszahlengenerators
(Klassenschablone) [bearbeiten]
packt die Ausgabe eines Zufallszahlengenerators in Blöcke einer bestimmten Anzahl von Bits
(Klassenschablone) [bearbeiten]
liefert die Ausgabe eines Zufallszahlengenerators in einer anderen Reihenfolge
(Klassenschablone) [bearbeiten]

Die folgenden Standardbibliotheksfunktionen erfüllen UniformRandomBitGenerator, aber nicht RandomNumberEngine.

nicht-deterministischer Zufallszahlengenerator mit Hardware-Entropiequelle
(Klasse) [bearbeiten]