類模板
<random>

std::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;
梅森旋轉偽隨機數生成器引擎
一個生成閉區間 [0,2w-1] 內無符號整數的偽隨機數生成器引擎。

該引擎使用的演算法經過最佳化,能夠以接近均勻的分佈生成大量的數字(例如在蒙特卡洛實驗中)。

該引擎有一個包含 n 個整數元素的內部狀態序列,該序列在 構造 時或透過呼叫成員函式 seed 生成偽隨機序列進行填充。

內部狀態序列成為 n 個元素的來源:當狀態更新時(例如,為了生成新的隨機數),引擎透過對當前值進行 扭轉 來改變狀態序列,使用異或掩碼 a,並結合由引數 r 決定的當前值和距離 m 個元素的值的混合(詳情請參閱 operator())。

生成的隨機數是這些扭轉值的經過 調製的 版本。調製是一系列移位和異或操作,由引數 udsbtcl 定義,並應用於選定的狀態值(詳情請參閱 operator())。

生成的隨機數由梅森旋轉引擎具有相當於 2(n-1)*w-1 的 梅森數 的週期。

模板引數

UIntType
無符號整數型別。
引擎生成的數值是該型別。
w
字大小:狀態序列中每個 的位數。
此引數應小於或等於numeric_limits<UIntType>::digits.
n
狀態大小:狀態序列中的元素數量。這決定了生成序列的遞迴度。
m
移位大小:每次扭轉時,使用序列中距離 m 個元素的其他值來轉換元素。
此引數應小於或等於 n
r
掩碼位數:在每次扭轉中標記字分離點的位數。
此引數應小於或等於 w
a
異或掩碼:在每次扭轉中作為線性函式應用的異或掩碼。
此引數應小於(1u<<w).
s, t, u, l
調製移位引數:生成演算法使用的混淆操作的移位值。
這些引數應小於或等於 w
b, c, d
調製位掩碼引數:生成演算法使用的混淆操作的位掩碼值。
這些引數應小於(1u<<w).
f
初始化乘數:當使用單個值作為種子時,用於初始化狀態序列的初始化乘數。

sub_match for string literals (class)


成員型別

以下別名是...的成員型別梅森旋轉引擎:

成員型別定義說明
result_type第一個模板引數 (UIntType)生成的數字的型別。

成員函式


非成員函式


成員常量

成員常量定義說明
word_size第二個模板引數 (w)狀態序列中每個的位數。
state_size第三個模板引數 (n)狀態序列中的元素數量(遞迴次數)。
shift_size第四個模板引數(m)扭轉(twist)時用於轉換值的移位大小。
mask_bits第五個模板引數(r)在每次扭轉(twist)時標記字分隔點的位數。
xor_mask第六個模板引數(a)在每次扭轉(twist)上用作線性函式的異或掩碼。
tempering_u第七個模板引數(u)在生成演算法的擾碼(tempering)過程中使用的引數 u 的移位大小。
tempering_d第八個模板引數(d)在生成演算法的擾碼(tempering)過程中用作引數 d 的異或掩碼。
tempering_s第九個模板引數(s)在生成演算法的擾碼(tempering)過程中使用的引數 s 的移位大小。
tempering_b第十個模板引數(和 b)在生成演算法的擾碼(tempering)過程中用作引數 b 的異或掩碼。
tempering_t第十一個模板引數(t)在生成演算法的擾碼(tempering)過程中使用的引數 t 的移位大小。
tempering_c第十二個模板引數(c)在生成演算法的擾碼(tempering)過程中用作引數 c 的異或掩碼。
tempering_l第十三模板引數(l)在生成演算法的擾碼(tempering)過程中使用的引數 l 的移位大小。
initialization_multiplier第十四模板引數(f)當使用單個值作為種子時,用於初始化狀態序列的初始化乘數。
default_seed5489u構造或播種時使用的預設種子

另見