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
不帶正負號的整數結果類型。 如需可能的類型,請參閱 <random>。W
字組大小。 狀態序列的每個字組大小 (位元)。 前置條件:2u < W ≤ numeric_limits<UIntType>::digitsN
狀態大小。 狀態序列中的元素數 (值)。M
移位大小。 要在每個旋轉期間跳過的元素數。 前置條件:0 < M ≤ NR
遮罩位元。 前置條件:R ≤ WA
XOR 遮罩。 前置條件:A ≤ (1u<<W) - 1uU, S, T, L
調和移位參數。 用做編碼 (調和) 期間的移位值。 前置條件:U,S,T,L ≤ WD, B, C
調和位元遮罩參數。 用做編碼 (調和) 期間的位元遮罩值。 前置條件:D,B,C ≤ (1u<<W) - 1uF
初始化乘數。 用於協助初始化序列。 前置條件:F ≤ (1u<<W) - 1u
Members
mersenne_twister_engine::mersenne_twister_engine |
mersenne_twister_engine::min |
mersenne_twister_engine::discard |
mersenne_twister_engine::operator() |
mersenne_twister_engine::max |
mersenne_twister_engine::seed |
default_seed 是一個成員常數,定義為 5489u,用做 mersenne_twister_engine::seed 的預設參數值以及單一值建構函式。 |
如需引擎成員的詳細資訊,請參閱 <random>。
備註
此範本類別描述亂數引擎,其傳回封閉間隔的值:[0, 2W - 1]. 它會保留具有 W * (N - 1) + R 位元的大整數值。 它一次會從這個大數值擷取 W 位元,而且使用所有位元時,它會使用移位和混合位元旋轉大數值,使其具有一組要從中擷取的新位元。 如果至少已呼叫 operator() N 次,則引擎狀態是最後使用的 N 個 W 位元值,否則為已使用的 M 個 W 位元值以及上一次種子的最後 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 年)。
|
mt19937_64 |
64 位元梅森旋轉引擎 (Matsumoto 和 Nishimura,2000 年)。
|
如需梅森旋轉演算法的詳細資訊,請參閱 Wikipedia 文章:梅森旋轉。
範例
如需程式碼範例,請參閱<random>。
需求
標頭:<random>
命名空間: std