C++ benannte Anforderungen: UniformRandomBitGenerator (seit C++11)
Ein uniformer Zufallsbitgenerator ist ein Funktions-Objekt, das vorzeichenlose Ganzzahlwerte zurückgibt, sodass jeder Wert im Bereich möglicher Ergebnisse (idealerweise) die gleiche Wahrscheinlichkeit hat.
Uniforme Zufallsbitgeneratoren sind nicht dazu gedacht, als Zufallszahlengeneratoren verwendet zu werden: Sie werden als Quelle für Zufallsbits verwendet (die aus Effizienzgründen in großen Mengen generiert werden). Jeder uniforme Zufallsbitgenerator kann in jede Zufallszahlendistribution eingesetzt werden, um eine Zufallszahl (formal eine Zufallsvariante) zu erhalten.
Inhalt |
[bearbeiten] Anforderungen
Der Typ G erfüllt die Anforderung UniformRandomBitGenerator, wenn
|
Gegeben sei
|
(bis C++20) |
| Ausdruck | Typ | Anforderungen |
|---|---|---|
| G::min() | G::result_type
|
|
| G::max() | G::result_type
|
|
| g() | G::result_type
|
|
|
Alle folgenden Bedingungen sind erfüllt
|
(seit C++20) |
[bearbeiten] Hinweise
Alle RandomNumberEngines erfüllen diese Anforderung.
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliothekseinrichtungen erwarten einen Typ UniformRandomBitGenerator.
| (bis C++17)(C++11) |
Ordnet Elemente in einem Bereich zufällig neu an (Funktionstemplate) |
| (C++17) |
Wählt N zufällige Elemente aus einer Sequenz aus (Funktionstemplate) |
| (C++11) |
verteilt reelle Werte mit gegebener Genauigkeit gleichmäßig über [0, 1)(Funktionstemplate) |
| (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) |
| alle anderen Zufallszahlendistributionen | |
Die folgenden Standardbibliothekseinrichtungen erfüllen UniformRandomBitGenerator, ohne zusätzlich RandomNumberEngine zu erfüllen.
| (C++11) |
nicht-deterministischer Zufallszahlengenerator mit Hardware-Entropiequelle (Klasse) |
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2154 (P0898R3) |
C++11 | war unklar, ob G::min() und G::max() konstante Ausdrücke sein müssen[1] |
Gefordert |
- ↑ Die Zeitkomplexitätsanforderung für diese Ausdrücke war vor C++20 "zur Kompilierzeit". Die Formulierung ist mehrdeutig, da "Zeitkomplexität zur Kompilierzeit" sowohl als "kann zur Kompilierzeit ausgewertet werden" als auch als "die Zeitkomplexität kann zur Kompilierzeit bestimmt werden" interpretiert werden kann.
[bearbeiten] Siehe auch
| (C++20) |
spezifiziert, dass ein Typ als gleichmäßiger Zufallsbitgenerator qualifiziert ist (Konzept) |