C++ benannte Anforderungen: RandomNumberDistribution (seit C++11)
Eine RandomNumberDistribution ist ein Funktions-Objekt, das Zufallszahlen gemäß einer Wahrscheinlichkeitsdichtefunktion p(x) oder einer diskreten Wahrscheinlichkeitsverteilung P(xi) zurückgibt.
[bearbeiten] Anforderungen
Der Typ D erfüllt die Anforderung RandomNumberDistribution, wenn
-
Ddie Anforderung CopyConstructible erfüllt -
Ddie Anforderung CopyAssignable erfüllt
Gegeben
-
T, der Typ, der durch D::result_type benannt wird -
P, der Typ, der durch D::param_type benannt wird, welcher
- die Anforderung CopyConstructible erfüllt
- die Anforderung CopyAssignable erfüllt
- die Anforderung EqualityComparable erfüllt
- einen Konstruktor besitzt, der identische Argumente wie die Konstruktoren von
Dentgegennimmt, die Argumente entsprechend den Verteilungsparametern annehmen. - eine Memberfunktion mit dem identischen Namen, Typ und Semantik für jede Memberfunktion von
Ddeklariert, die einen Parameter der Verteilung zurückgibt - einen Member-Typedef using distribution_type = D; deklariert
-
d, ein Wert vom TypD -
xundy, (möglicherweise const) Werte vom TypD -
p, ein (möglicherweise const) Wert vom TypP -
g,g1,g2, lvalues eines Typs, der UniformRandomBitGenerator erfüllt -
os, lvalue einer Spezialisierung von std::basic_ostream -
is, lvalue einer Spezialisierung von std::basic_istream
Die folgenden Ausdrücke müssen gültig sein und ihre angegebenen Effekte haben
| Ausdruck | Typ | Anmerkungen | Komplexität |
|---|---|---|---|
D::result_type |
T |
Ein arithmetischer Typ | Kompilierzeit |
D::param_type |
P |
Kompilierzeit | |
D() |
Erzeugt eine Verteilung, die von jeder anderen Standard-konstruierten D nicht unterscheidbar ist |
Konstante | |
D(p) |
Erzeugt eine Verteilung, die von D, konstruiert direkt aus den Werten, die zur Konstruktion von p verwendet wurden, nicht unterscheidbar ist |
Wie die Konstruktion von p | |
d.reset() |
void |
Setzt den internen Zustand der Verteilung zurück. Der nächste Aufruf von operator() auf d wird nicht von Werten abhängen, die von einer Engine vor reset() erzeugt wurden |
Konstante |
x.param() |
P |
Gibt p zurück, so dass D(p).param() == p |
Nicht schlechter als D(p) |
d.param(p) |
void |
Nachbedingung: d.param() == p | Nicht schlechter als D(p) |
d(g) |
T |
Die Sequenz von Zahlen, die von aufeinanderfolgenden Aufrufen dieses Aufrufs mit demselben g zurückgegeben werden, sind zufällig verteilt gemäß der Verteilung, die durch d.param() parametrisiert ist |
Amortisiert konstante Anzahl von Aufrufen von g |
d(g,p) |
T |
Die Sequenz von Zahlen, die von aufeinanderfolgenden Aufrufen dieses Aufrufs mit demselben g zurückgegeben werden, sind zufällig verteilt gemäß der Verteilung, die durch p parametrisiert ist |
Amortisiert konstante Anzahl von Aufrufen von g |
x.min() |
T |
Die größte untere Schranke für die Werte, die potenziell von x’s operator() zurückgegeben werden, bestimmt durch die aktuellen Werte der Parameter von x |
Konstante |
x.max() |
T |
Die kleinste obere Schranke für die Werte, die potenziell von x’s operator() zurückgegeben werden, bestimmt durch die aktuellen Werte der Parameter von x |
Konstante |
x == y |
bool |
Stellt eine Äquivalenzrelation her. Gibt true zurück, wenn x.param() == y.param() und zukünftige unendliche Sequenzen von Werten, die durch wiederholte Aufrufe von x(g1) und y(g2) erzeugt würden, gleich wären, solange g1 == g2 |
Konstante |
x != y |
bool |
!(x == y) |
Konstante |
os << x |
Referenz auf den Typ von os |
Schreibt eine textuelle Darstellung der Verteilungsparameter und des internen Zustands nach os. Die Formatierungsflags und das Füllzeichen von os bleiben unverändert |
|
is >> d |
Referenz auf den Typ von is |
Stellt die Verteilungsparameter und den internen Zustand mit Daten wieder her, die aus is gelesen wurden. Die Formatierungsflags von is bleiben unverändert. Die Daten müssen mit einem Stream mit denselben Locale-, CharT- und Traits-Stream-Vorlagenparametern geschrieben worden sein, andernfalls ist das Verhalten undefiniert. Wenn ungültige Eingaben angetroffen werden, wird is.setstate(std::ios::failbit) aufgerufen, was std::ios_base::failure auslösen kann. d bleibt in diesem Fall unverändert |
[bearbeiten] Hinweise
Die Parameter eines Verteilungsobjekts können entweder dauerhaft durch die Verwendung von d.param(p) oder nur für die Dauer eines einzelnen operator()-Aufrufs durch die Verwendung von d(g,p) geändert werden.
Aufrufe von const-Memberfunktionen der Verteilung und os << d beeinträchtigen nicht die Sequenz von Zahlen, die durch wiederholte Aufrufe von d(g) erzeugt werden.
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliothekskomponenten erfüllen die Anforderung RandomNumberDistribution
| (C++11) |
erzeugt ganzzahlige Werte, die gleichmäßig über einen Bereich verteilt sind (Klassenschablone) |
| (C++11) |
erzeugt reelle Werte, die gleichmäßig über einen Bereich verteilt sind (Klassenschablone) |
| (C++11) |
erzeugt bool-Werte einer Bernoulli-Verteilung (Klasse) |
| (C++11) |
erzeugt ganzzahlige Werte nach einer Binomialverteilung (Klassentemplate) |
| erzeugt ganzzahlige Werte nach einer negativen Binomialverteilung (Klassentemplate) | |
| (C++11) |
erzeugt ganzzahlige Werte nach einer geometrischen Verteilung (Klassentemplate) |
| (C++11) |
erzeugt Ganzzahlwerte einer Poisson-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer exponentiellen Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Gamma-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Weibull-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Extremwertverteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Standardnormalverteilung (Gauß-Verteilung) (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer lognormalen Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Chi-Quadrat-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Cauchy-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Fisher-F-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt reelle Werte nach einer Student'schen t-Verteilung (Klassentemplate) |
| (C++11) |
erzeugt Zufallsganzzahlen einer diskreten Verteilung (Klassentemplate) |
| erzeugt reelle Werte, die auf konstanten Teilintervallen verteilt sind (Klassentemplate) | |
| erzeugt reelle Werte, die auf definierten Teilintervallen verteilt sind (Klassentemplate) |