std:: subtract_with_carry_engine
|
Definiert im Header
<random>
|
||
|
template
<
class
UIntType,
|
(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 ,2w
)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:
- Sei Y gleich X i-s -X i-r -c .
-
Sei
y
gleich
Y mod 2
w
, und setze X i auf y . - 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) |
|
(C++11)
|
führt Stream-Eingabe und -Ausgabe auf Pseudozufallszahlengenerator durch
(Funktionsschablone) |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein 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 |