Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
, 2
W - 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