Namespaces
Variants

std:: subtract_with_carry_engine

From cppreference.net
Definiert im Header <random>
template <

class UIntType,
std:: size_t w, std:: size_t s, std:: size_t r

> class subtract_with_carry_engine ;
(seit C++11)

Ist eine Zufallszahlen-Engine, die den Subtract-with-Carry Algorithmus verwendet.

Inhaltsverzeichnis

Template-Parameter

UIntType - Der vom Generator erzeugte Ergebnistyp. Das Verhalten ist undefiniert, falls dies nicht einer der folgenden Typen ist: unsigned short , unsigned int , unsigned long , oder unsigned long long .
w - die Wortgröße in Bits der Zustandssequenz
s - die kurze Verzögerung
r - die lange Verzögerung

Wenn w nicht in [ 1 , std:: numeric_limits < UIntType > :: digits ] liegt, oder s nicht in [ 1 , r ) liegt, ist das Programm fehlerhaft.

Generatoreigenschaften

Die Größe der Zustände von subtract_with_carry_engine beträgt O(r) , wobei jeder aus zwei Teilen besteht:

  • Eine Sequenz X von r ganzzahligen Werten, wobei jeder Wert im Bereich [ 0 , 2 w
    )
    liegt.
  • Eine Ganzzahl c (bekannt als Carry ), deren Wert entweder 0 oder 1 beträgt.

Gegeben, dass X j für den j mod r -ten Wert (beginnend bei 0) von X steht, ist der Übergangsalgorithmus von subtract_with_carry_engine ( TA(x i ) ) wie folgt definiert:

  1. Sei Y gleich X i-s -X i-r -c .
  2. Sei y gleich Y mod 2 w
    , und setze X i auf y .
  3. Falls Y negativ ist, setze c auf 1 , andernfalls setze c auf 0 .

Der Generierungsalgorithmus von subtract_with_carry_engine ist GA(x i ) = y , wobei y der in Schritt 2 des Übergangsalgorithmus erzeugte Wert ist.

Vordefinierte Spezialisierungen

Die folgenden Spezialisierungen definieren die Zufallszahlen-Engine mit zwei häufig verwendeten Parametersätzen:

Definiert im Header <random>
Typ Definition
ranlux24_base (C++11) std :: subtract_with_carry_engine < std:: uint_fast32_t , 24 , 10 , 24 >
ranlux48_base (C++11) std :: subtract_with_carry_engine < std:: uint_fast64_t , 48 , 5 , 12 >

Verschachtelte Typen

Typ Definition
result_type UIntType

Datenmitglieder

constexpr std::size_t Wortgröße
[static]
w
(öffentliche statische Memberkonstante)
constexpr std::size_t Kurzverzögerung
[static]
s
(öffentliche statische Memberkonstante)
constexpr std::size_t Langverzögerung
[static]
r
(öffentliche statische Memberkonstante)
constexpr std::uint_least32_t Standardstartwert
[static]
19780503u
(öffentliche statische Memberkonstante)

Memberfunktionen

Konstruktion und Initialisierung
konstruiert die Engine
(öffentliche Elementfunktion)
setzt den aktuellen Zustand der Engine
(öffentliche Elementfunktion)
Generierung
verändert den Zustand der Engine und gibt den generierten Wert zurück
(öffentliche Elementfunktion)
verändert den Zustand der Engine um einen bestimmten Betrag
(öffentliche Elementfunktion)
Eigenschaften
[static]
liefert den kleinstmöglichen Wert im Ausgabebereich
(öffentliche statische Elementfunktion)
[static]
liefert den größtmöglichen Wert im Ausgabebereich
(öffentliche statische Elementfunktion)

Nicht-Member-Funktionen

(C++11) (C++11) (entfernt in C++20)
vergleicht die internen Zustände zweier Pseudozufallszahlengeneratoren
(Funktion)
führt Stream-Eingabe und -Ausgabe auf Pseudozufallszahlengenerator durch
(Funktionsschablone)

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3809 C++11 default_seed könnte nicht
mit result_type darstellbar sein
änderte seinen Typ zu
std::uint_least32_t