std::subtract_with_carry_engine
| Definiert in Header <random> |
||
| template< class UIntType, |
(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 [1, std::numeric_limits<UIntType>::digits] liegt oder s nicht in [1, r) 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
[0,2w)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:
- Sei Y gleich Xi-s-Xi-r-c.
- Sei y gleich Y mod 2w
und setze Xi auf y. - 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> |
ranlux48_base (C++11) |
std::subtract_with_carry_engine<std::uint_fast64_t, 48, 5, 12> |
[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) |
| (C++11) |
führt Stream-Ein- und -Ausgabe auf Pseudo-Zufallszahlengeneratoren durch (function template) |
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein 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 seinrepräsentierbar mit result_type |
änderte seinen Typ zu std::uint_least32_t |