Namensräume
Varianten
Aktionen

std::subtract_with_carry_engine

Von cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
 
Definiert in 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 Zufallszahl-Engine, die den Subtract-with-Carry-Algorithmus verwendet.

Inhalt

[bearbeiten] Template-Parameter

UIntType - Der vom Generator erzeugte Ergebnistyp. Das Verhalten ist undefiniert, wenn 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 (Lag)
r - die lange Verzögerung (Lag)

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

[bearbeiten] Generatoreigenschaften

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

  • Eine Sequenz X von r Ganzzahlwerten, wobei jeder Wert in [02w
    )
    liegt.
  • Eine Ganzzahl c (bekannt als *Carry*), deren Wert entweder 0 oder 1 ist.

Unter der Annahme, dass Xj den j mod r-ten Wert (beginnend bei 0) von X darstellt, wird der Übergangsalgorithmus von subtract_with_carry_engine (TA(xi)) wie folgt definiert:

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

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

[bearbeiten] Vordefinierte Spezialisierungen

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

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

[bearbeiten] Verschachtelte Typen

Typ Definition
result_type UIntType

[bearbeiten] Datenmitglieder

constexpr std::size_t word_size
[static]
w
(öffentliche statische Member-Konstante)
constexpr std::size_t short_lag
[static]
s
(öffentliche statische Member-Konstante)
constexpr std::size_t long_lag
[static]
r
(öffentliche statische Member-Konstante)
constexpr std::uint_least32_t default_seed
[static]
19780503u
(öffentliche statische Member-Konstante)

[bearbeiten] Member-Funktionen

Konstruktion und Initialisierung
konstruiert die Engine
(public member function) [[Bearbeiten]]
setzt den aktuellen Zustand der Engine
(public member function) [[Bearbeiten]]
Generierung
verschiebt den Zustand der Engine und gibt den generierten Wert zurück
(public member function) [[Bearbeiten]]
verschiebt den Zustand der Engine um einen angegebenen Betrag
(public member function) [[Bearbeiten]]
Eigenschaften des Generators
[static]
liefert den kleinstmöglichen Wert im Ausgabebereich
(public static member function) [[Bearbeiten]]
[static]
liefert den größtmöglichen Wert im Ausgabebereich
(public static member function) [[Bearbeiten]]

[bearbeiten] Nicht-Member-Funktionen

(C++11)(C++11)(entfernt in C++20)
vergleicht die internen Zustände zweier Pseudozufallszahlengeneratoren
(function) [bearbeiten]
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlengeneratoren durch
(function template) [edit]

[bearbeiten] Beispiel

[bearbeiten] Defect Reports

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 3809 C++11 default_seed könnte nicht sein
repräsentierbar mit result_type
änderte seinen Typ zu
std::uint_least32_t