subtract_with_carry_engine-Klasse
Generiert eine zufällige Sequenz mithilfe des (verzögerten Fibonacci-)Algorithmus "subtract with carry".
Syntax
template <class UIntType, size_t W, size_t S, size_t R>
class subtract_with_carry_engine;
Parameter
UIntType
Der unsigned integer-Ergebnistyp. Mögliche Typen finden Sie unter <"zufällig>".
W
Wortgröße. Größe jedes einzelnen Wortes der Zustandssequenz in Bits. Vorbedingung:0 < W ≤ numeric_limits<UIntType>::digits
S
Kurze Verzögerung. Anzahl der Ganzzahlwerte. Vorbedingung:0 < S < R
R
Lange Verzögerung. Bestimmt die Wiederholungsrate in der generierten Serie.
Member
subtract_with_carry_engine::subtract_with_carry_engine
subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
subtract_with_carry_engine::seed
default_seed
ist eine als 19780503u
definierte Memberkonstante, die als Standardparameterwert für subtract_with_carry_engine::seed
und den Einzelwertkonstruktor verwendet wird.
Weitere Informationen zu Modulmitgliedern finden Sie unter <"zufällig>".
Hinweise
Die substract_with_carry_engine
Klassenvorlage ist eine Verbesserung gegenüber dem linear_congruential_engine. Keines dieser Module ist so schnell oder gibt so hochqualitative Ergebnisse zurück wie das mersenne_twister_engine.
Dieses Modul erzeugt Werte eines vom Benutzer angegebenen nicht signierten integralen Typs mithilfe der Serienbeziehung ( Punkt), x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M
wobei cy(i)
der Wert 1
", wenn x(i - S) - x(i - R) - cy(i - 1) < 0
, andernfalls 0
, und M
der Wert 2
W hat. Der Zustand des Motors ist ein Tragenindikator plus R-Werte . Diese Werte bestehen aus den letzten R-Werten , die zurückgegeben werden, wenn operator()
sie mindestens R-Mal aufgerufen wurden, andernfalls die N
zurückgegebenen Werte und die letzten R - N
Werte des Ausgangswerts.
Das Vorlagenargument UIntType
muss groß genug sein, um Werte bis zu M - 1
zu enthalten.
Obwohl Sie direkt aus dieser Engine einen Generator konstruieren können, können Sie auch eine der voreingestellten Typdefinitionen verwenden:
ranlux24_base
: Wird als Grundlage für ranlux24
verwendet.
typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;
ranlux48_base
: Wird als Grundlage für ranlux48
verwendet.
typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;
Ausführliche Informationen zum Subtrahieren mit dem Tragen-Motoralgorithmus finden Sie im Wikipedia-Artikel Lagged Fibonacci Generator.
Anforderungen
Header:<random>
Namespace: std