Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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 G g, ein Wert vom Typ G. Alle folgenden Bedingungen sind erfüllt:

  • G::result_type ist gültig und bezeichnet einen vorzeichenlosen Ganzzahltyp.
  • Die folgenden Ausdrücke müssen gültig sein und ihre angegebenen Effekte haben
(bis C++20)
 Ausdruck  Typ Anforderungen
G::min() G::result_type 
  • Liefert den kleinsten Wert, den der Operator() von G zurückgeben kann. 
  • Der Ergebniswert ist strikt kleiner als G::max().
  • Der Ausdruck muss ein konstanter Ausdruck sein.
G::max() G::result_type
  • Liefert den größten Wert, den der Operator() von G zurückgeben kann.
  • Der Ergebniswert ist strikt größer als G::min().
  • Der Ausdruck muss ein konstanter Ausdruck sein.
g() G::result_type
  • Gibt einen Wert im geschlossenen Intervall [G::min()G::max()] zurück.
  • Hat amortisierte konstante Komplexität.

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) [edit]
(C++17)
Wählt N zufällige Elemente aus einer Sequenz aus
(Funktionstemplate) [edit]
verteilt reelle Werte mit gegebener Genauigkeit gleichmäßig über [01)
(Funktionstemplate) [edit]
erzeugt ganzzahlige Werte, die gleichmäßig über einen Bereich verteilt sind
(Klassenschablone) [bearbeiten]
erzeugt reelle Werte, die gleichmäßig über einen Bereich verteilt sind
(Klassenschablone) [bearbeiten]
alle anderen Zufallszahlendistributionen

Die folgenden Standardbibliothekseinrichtungen erfüllen UniformRandomBitGenerator, ohne zusätzlich RandomNumberEngine zu erfüllen.

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

[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
  1. 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

spezifiziert, dass ein Typ als gleichmäßiger Zufallsbitgenerator qualifiziert ist
(Konzept) [bearbeiten]