Freigeben über


mersenne_twister_engine-Klasse

Generiert mithilfe des Mersenne-Twisteralgorithmus eine qualitativ hochwertige Zufallssequenz aus Ganzzahlen.

Syntax

template <class UIntType,
    size_t W, size_t N, size_t M, size_t R,
    UIntType A, size_t U, UIntType D, size_t S,
    UIntType B, size_t T, UIntType C, size_t L, UIntType F>
class mersenne_twister_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:2u < W ≤ numeric_limits<UIntType>::digits

N
Zustandsgröße. Die Anzahl von Elementen (Werten) in der Zustandssequenz.

M
Verschiebungsgröße. Die Anzahl von Elementen, die während jeder Verzerrung übersprungen werden sollen. Vorbedingung:0 < M ≤ N

R
Maskenbits. Vorbedingung:R ≤ W

A
XOR-Maske. Vorbedingung:A ≤ (1u<<W) - 1u

U, S, T, L
Tempering der Verschiebungsparameter. Werden während der Verschlüsselung (Tempering) als Verschiebungswerte verwendet. Vorbedingung: U,S,T,L ≤ W

D, B, C
Tempering von Bitmaskenparametern. Werden während der Verschlüsselung (Tempering) als Maskenwerte verwendet. Vorbedingung: D,B,C ≤ (1u<<W) - 1u

F
Initialisierungsmultiplikator. Wird verwendet, um die Initialisierung der Sequenz zu unterstützen. Vorbedingung: F ≤ (1u<<W) - 1u

Member

mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed

default_seed ist eine als 5489u definierte Memberkonstante, die als Standardparameterwert für mersenne_twister_engine::seed und den Einzelwertkonstruktor verwendet wird.

Weitere Informationen zu Modulmitgliedern finden Sie unter <"zufällig>".

Hinweise

Diese Klassenvorlage beschreibt ein Zufallszahlenmodul, das Werte im geschlossenen Intervall zurückgibt [ 0,2 W1 - ]. Sie enthält einen großen Integralwert mit W * (N - 1) + R Bits. Es extrahiert W-Bits zu einem Zeitpunkt aus diesem großen Wert, und wenn es alle Bits verwendet hat, verdreht es den großen Wert, indem er die Bits verschiebt und mischt, sodass es über einen neuen Satz von Bits verfügt, aus denen extrahiert werden soll. Der Zustand des Moduls ist die letzte N W-Bit-Werte, die verwendet werden, wenn operator() mindestens N mal aufgerufen wurden, andernfalls die M W-Bit-Werte, die verwendet wurden, und die letzten N - M Werte des Seeds.

Der Generator verdreht den großen Wert, den er hält, indem ein verdrehtes generalisiertes Feedbackverschiebungsregister verwendet wird, das durch Schichtwerte N und M, einen Drehwert R und eine bedingte XOR-Maske A definiert ist. Darüber hinaus werden die Bits des Rohschichtregisters gemäß einer Bit-Scrambling-Matrix gehärtet (gehärtet), die durch werte U, D, S, B, T, C und L definiert wird.

Das Vorlagenargument UIntTypemuss groß genug sein, um Werte bis zu 2W - 1 zu enthalten. Die Werte der anderen Vorlagenargumente müssen die folgenden Anforderungen erfüllen: 2u < W, 0 < M, M ≤ N, R ≤ W, U ≤ W, S ≤ W, T ≤ W, L ≤ W, W ≤ numeric_limits<UIntType>::digits, A ≤ (1u<<W) - 1u, B ≤ (1u<<W) - 1u, C ≤ (1u<<W) - 1u, D ≤ (1u<<W) - 1u, and F ≤ (1u<<W) - 1u.

Obwohl Sie direkt aus dieser Engine einen Generator konstruieren können, wird empfohlen, eine dieser voreingestellten Typedefs zu verwenden:

mt19937: 32-Bit-Mersenne-Twister-Engine (Matsumoto und Nishimura, 1998).

typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
    31, 0x9908b0df,
    11, 0xffffffff,
    7, 0x9d2c5680,
    15, 0xefc60000,
    18, 1812433253> mt19937;

mt19937_64: 64-Bit-Mersenne-Twister-Engine (Matsumoto und Nishimura, 2000).

typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
    31, 0xb5026f5aa96619e9ULL,
    29, 0x5555555555555555ULL,
    17, 0x71d67fffeda60000ULL,
    37, 0xfff7eee000000000ULL,
    43, 6364136223846793005ULL> mt19937_64;

Ausführliche Informationen über den Mersenne-Twisteralgorithmus erhalten Sie im Wikipedia-Artikel Mersenne twister (Mersenne-Twister).

Beispiel

Ein Codebeispiel finden Sie unter "zufällig">.<

Anforderungen

Header:<random>

Namespace: std

Siehe auch

<random>