类模板
<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构造或播种时使用的默认种子

另见