std::mersenne_twister_engine
定义在头文件 <random> 中 |
||
template< class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r, |
(自 C++11 起) | |
mersenne_twister_engine
是基于 梅森旋转器 算法的随机数引擎。它生成高质量的无符号整数随机数,但不是加密安全的,类型为 UIntType
,位于区间 [0, 2w
)。
内容 |
[编辑] 模板参数
UIntType | - | 生成器生成的結果类型。如果它不是 unsigned short、unsigned int、unsigned long 或 unsigned long long 中的一种,则行为未定义。 |
w | - | 决定引擎生成的值范围的二的幂 |
n | - | 递归度 |
m | - | 中间词,定义状态的递归关系中使用的偏移量 |
r | - | 较低位掩码的位数,也称为扭曲值 |
a | - | 条件异或掩码,即有理规范形式扭曲矩阵的系数 |
u, d, s, b, t, c, l | - | 位混淆(调制)矩阵的第 1 到第 7 个分量 |
f | - | 初始化乘数 |
如果违反以下任何限制,则程序格式错误
- m 在
[
1,
n]
中。 - 以下表达式均为 true
- w >= 3
- w >= r
- w >= u
- w >= s
- w >= t
- w >= l
- w <= std::numeric_limits<UIntType>::digits
- 假设 (1u << w) - 1u 为 w1,则以下表达式均为 true
- a <= w1
- b <= w1
- c <= w1
- d <= w1
- f <= w1
[编辑] 生成器属性
mersenne_twister_engine
的状态的 大小 为 n,每个状态都包含一个类型为 result_type
的 n 个值的序列 X。 X
j 代表 X 的第 j mod n 个值(从 0 开始)。
给出以下位运算符号
mersenne_twister_engine
的 转换算法 (TA(x
i)) 定义如下
- 将 X
i-n 的较高 w - r 位与 X
i+1-n 的较低 r 位连接起来,得到一个无符号整数 Y。 - 令 y 为 a·(Y bitand 1),并将 X
i 设置为 X
i+m−n xor (Y rshift 1) xor y。
mersenne_twister_engine
的 生成算法 (GA(x
i)) 定义如下:
- 令 z
1 为 X
i xor ((X
i rshift u) bitand d)。 - 令 z
2 为 X
i xor (((X
i lshift s) mod 2w
) bitand b)。 - 令 z
3 为 X
i xor (((X
i lshift t) mod 2w
) bitand c)。 - 令 z
4 为 z
3 xor (z
3 rshift l)。 - 将 z
4 作为结果输出 (即 GA(x
i)=z
4).
[edit] 预定义的特殊化
以下特殊化定义了随机数引擎,使用两种常用的参数集。
定义在头文件
<random> 中 | |
类型 | 定义 |
mt19937 (C++11) |
std::mersenne_twister_engine<std::uint_fast32_t, |
mt19937_64 (C++11) |
std::mersenne_twister_engine<std::uint_fast64_t, |
[edit] 嵌套类型
类型 | 定义 |
result_type
|
UIntType
|
[edit] 数据成员
constexpr size_t word_size [static] |
w (公共静态成员常量) |
constexpr size_t state_size [static] |
n (公共静态成员常量) |
constexpr size_t shift_size [static] |
m (公共静态成员常量) |
constexpr size_t mask_bits [static] |
r (公共静态成员常量) |
constexpr UIntType xor_mask [static] |
a (公共静态成员常量) |
constexpr size_t tempering_u [static] |
u (公共静态成员常量) |
constexpr UIntType tempering_d [static] |
d (公共静态成员常量) |
constexpr size_t tempering_s [static] |
s (公共静态成员常量) |
constexpr UIntType tempering_b [static] |
b (公共静态成员常量) |
constexpr size_t tempering_t [static] |
t (公共静态成员常量) |
constexpr UIntType tempering_c [static] |
c (公共静态成员常量) |
constexpr size_t tempering_l [static] |
l (公共静态成员常量) |
constexpr UIntType initialization_multiplier [static] |
f (公共静态成员常量) |
constexpr UIntType default_seed [static] |
5489u (公共静态成员常量) |
[edit] 成员函数
构造和播种 | |
(C++11) |
构造引擎 (公共成员函数) |
(C++11) |
设置引擎的当前状态 (公共成员函数) |
生成 | |
(C++11) |
推进引擎的状态,并返回生成的数值 (公共成员函数) |
(C++11) |
推进引擎的状态,步进指定的次数 (公共成员函数) |
特征 | |
[static] (C++11) |
获取输出范围内的最小可能数值 (公共静态成员函数) |
[static] (C++11) |
获取输出范围内的最大可能数值 (公共静态成员函数) |
[edit] 非成员函数
(C++11)(C++11)(在 C++20 中移除) |
比较两个伪随机数引擎的内部状态 (函数) |
(C++11) |
对伪随机数引擎执行流输入和输出 (函数模板) |
[edit] 示例
本节内容不完整 原因:没有示例 |