Share via


mersenne_twister_engine 類別

根據梅森旋轉演算法,產生高品質隨機整數序列。

語法

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;

參數

UIntType
不帶正負號的整數結果類型。 如需可能的類型,請參閱 < 隨機 >

W
字組大小。 狀態序列的每個字組大小 (位元)。 前置條件:2u < W ≤ numeric_limits<UIntType>::digits


狀態大小。 狀態序列中的元素數 (值)。

M
移位大小。 要在每個旋轉期間跳過的元素數。 前置條件:0 < M ≤ N

R
遮罩位元前置條件:R ≤ W

A
XOR 遮罩前置條件:A ≤ (1u<<W) - 1u

U S T L
調和移位參數。 用做編碼 (調和) 期間的移位值。 前置條件:U,S,T,L ≤ W

D B C
調和位元遮罩參數。 用做編碼 (調和) 期間的位元遮罩值。 前置條件:D,B,C ≤ (1u<<W) - 1u

F
初始化乘數。 用於協助初始化序列。 前置條件:F ≤ (1u<<W) - 1u

成員

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 是一個成員常數,定義為 5489u,用做 mersenne_twister_engine::seed 的預設參數值以及單一值建構函式。

如需引擎成員的詳細資訊,請參閱 < 隨機 >

備註

此類別範本描述亂數引擎,傳回封閉間隔 [ 02 W - 1 ] 的值。 它會保留具有 W * (N - 1) + R 位元的大整數值。 它會一次從這個大型值擷取 W 位,而且當它已使用所有位時,它會透過移動和混合位來扭曲大型值,讓它有一組新的位可供擷取。 引擎的狀態是在至少呼叫 N 次時 operator() 所使用的最後 NW 一個位值,否則 WM 已使用的 -bit 值和種子的最後一個 N - M 值。

產生器會使用由移位值 N 和 M、扭曲值 R 和條件式 XOR 遮罩 A 所定義的扭曲一般化回饋移位暫存器,來扭曲其保留的大型值 此外,根據 U 、D S 、B T C L 所定義的位爭吵矩陣,原始移位暫存器會進行拼文書處理(調和)。

範本引數 UIntType 必須大到足以保留多達 2W - 1 的值。 其他範本引數的值必須滿足下列需求: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

雖然您可以直接從此引擎建構產生器,但是建議您使用下列其中一個預先定義的 typedef:

mt19937:32 位元梅森旋轉引擎 (Matsumoto 和 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 位元梅森旋轉引擎 (Matsumoto 和 Nishimura,2000 年)。

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

如需有關梅森旋轉演算法的詳細資訊,請參閱 Wikipedia 文章:梅森旋轉算法

範例

如需程式碼範例,請參閱 < 隨機 >

需求

標頭: < random>

命名空間:std

另請參閱

<random>