Udostępnij za pośrednictwem


mersenne_twister_engine — Klasa

Generuje losową sekwencję liczb całkowitych wysokiej jakości na podstawie algorytmu twister Mersenne.

Składnia

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;

Parametry

UIntType
Typ wyniku niepodpisanej liczby całkowitej. Aby uzyskać informacje o możliwych typach, zobacz losowe>.<

W
Rozmiar programu Word. Rozmiar każdego wyrazu w bitach sekwencji stanu. Warunek wstępny: 2u < W ≤ numeric_limits<UIntType>::digits

N
Rozmiar stanu. Liczba elementów (wartości) w sekwencji stanu.

M
Zmiana rozmiaru. Liczba elementów do pominięcia podczas każdego skręcenia. Warunek wstępny: 0 < M ≤ N

R
Maskuj bity. Warunek wstępny: R ≤ W

A
Maska XOR. Warunek wstępny: A ≤ (1u<<W) - 1u

U, S, T, L
Parametry przesunięcia hartowania. Używane jako wartości przesunięcia podczas scrambling (hartowanie). Warunek wstępny: U,S,T,L ≤ W

D, B, C
Parametry maski bitów hartowania. Używane jako wartości maski bitowej podczas scrambling (hartowanie). Warunek wstępny: D,B,C ≤ (1u<<W) - 1u

F
Mnożnik inicjowania. Służy do ułatwienia inicjowania sekwencji. Warunek wstępny: F ≤ (1u<<W) - 1u

Elementy członkowskie

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 jest stałą składową zdefiniowaną jako 5489u, używaną jako domyślna wartość parametru dla mersenne_twister_engine::seed i konstruktora pojedynczej wartości.

Aby uzyskać więcej informacji na temat składowych aparatu, zobacz losowe>.<

Uwagi

Ten szablon klasy opisuje aparat liczb losowych, zwracając wartości w zamkniętym interwale [ 0, 2W - 1]. Zawiera dużą wartość całkowitą z W * (N - 1) + R bitami. Wyodrębnia bity W w czasie z tej dużej wartości, a kiedy używał wszystkich bitów, skręca dużą wartość, przesuwając i mieszając bity, tak aby miał nowy zestaw bitów do wyodrębnienia. Stan aparatu to ostatnie N W- bitowe wartości używane, jeśli operator() zostały wywołane co najmniej N razy, w przeciwnym razie M W-bitowe wartości, które zostały użyte i ostatnie N - M wartości inicjatora.

Generator skręci dużą wartość przechowywaną przy użyciu przekręconego uogólnionego rejestru zmiany opinii zdefiniowanej przez wartości przesunięcia N i M, wartość zwrotu akcji R i warunkową maskę XOR A. Ponadto bity rejestru nieprzetworzonego przesunięcia są zakodowane (hartowane) zgodnie z macierzą bitową zdefiniowaną przez wartości U, D, S, B, T, C i L.

Argument UIntType szablonu musi być wystarczająco duży, aby przechowywać wartości do2 W - 1. Wartości innych argumentów szablonu muszą spełniać następujące wymagania: 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.

Mimo że generator z tego aparatu można skonstruować bezpośrednio, zaleca się użycie jednej z tych wstępnie zdefiniowanych definicji typów:

mt19937: 32-bitowy silnik twister Mersenne (Matsumoto i 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-bitowy silnik twister Mersenne (Matsumoto i Nishimura, 2000).

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

Aby uzyskać szczegółowe informacje na temat algorytmu twister Mersenne, zobacz artykuł w Wikipedii Mersenne twister.

Przykład

Aby zapoznać się z przykładem kodu, zobacz losowe>.<

Wymagania

Nagłówek:<losowy>

Przestrzeń nazw: std

Zobacz też

<losowy>