命名空间
变体
操作

std::mersenne_twister_engine

来自 cppreference.com
< cpp‎ | numeric‎ | random
 
 
 
 
 
定义在头文件 <random>
template<

    class UIntType, std::size_t w, std::size_t n, std::size_t m, std::size_t r,
    UIntType a, std::size_t u, UIntType d, std::size_t s,
    UIntType b, std::size_t t, UIntType c, std::size_t l, UIntType f

> class mersenne_twister_engine;
(自 C++11 起)

mersenne_twister_engine 是基于 梅森旋转器 算法的随机数引擎。它生成高质量的无符号整数随机数,但不是加密安全的,类型为 UIntType,位于区间 [0, 2w
)

内容

[编辑] 模板参数

UIntType - 生成器生成的結果类型。如果它不是 unsigned shortunsigned intunsigned longunsigned long long 中的一种,则行为未定义。
w - 决定引擎生成的值范围的二的幂
n - 递归度
m - 中间词,定义状态的递归关系中使用的偏移量
r - 较低位掩码的位数,也称为扭曲值
a - 条件异或掩码,即有理规范形式扭曲矩阵的系数
u, d, s, b, t, c, l - 位混淆(调制)矩阵的第 1 到第 7 个分量
f - 初始化乘数

如果违反以下任何限制,则程序格式错误

  • m[1n] 中。
  • 以下表达式均为 true
  • 假设 (1u << w) - 1uw1,则以下表达式均为 true
  • a <= w1
  • b <= w1
  • c <= w1
  • d <= w1
  • f <= w1

[编辑] 生成器属性

mersenne_twister_engine 的状态的 大小n,每个状态都包含一个类型为 result_typen 个值的序列 XX
j
代表 X 的第 j mod n 个值(从 0 开始)。

给出以下位运算符号

  • bitand,内置 按位与
  • xor,内置 按位异或
  • lshift,内置 按位左移
  • rshift,内置 按位右移

mersenne_twister_engine转换算法 (TA(x
i
)
) 定义如下

  1. X
    i-n
    的较高 w - r 位与 X
    i+1-n
    的较低 r 位连接起来,得到一个无符号整数 Y
  2. ya·(Y bitand 1),并将 X
    i
    设置为 X
    i+m−n
    xor (Y rshift 1) xor y

mersenne_twister_engine生成算法 (GA(x
i
)
) 定义如下:

  1. z
    1
    X
    i
    xor ((X
    i
    rshift u) bitand d)
  2. z
    2
    X
    i
    xor (((X
    i
    lshift s) mod 2w
    ) bitand b)
  3. z
    3
    X
    i
    xor (((X
    i
    lshift t) mod 2w
    ) bitand c)
  4. z
    4
    z
    3
    xor (z
    3
    rshift l)
  5. z
    4
    作为结果输出 (即 GA(x
    i
    )=z
    4
    ).

[edit] 预定义的特殊化

以下特殊化定义了随机数引擎,使用两种常用的参数集。

定义在头文件 <random>
类型 定义
mt19937 (C++11)

std::mersenne_twister_engine<std::uint_fast32_t,
                             32, 624, 397, 31,
                             0x9908b0df, 11,
                             0xffffffff, 7,
                             0x9d2c5680, 15,
                             0xefc60000, 18, 1812433253>
32 位梅森旋转器,由松本和西村在 1998 年提出 [edit]

mt19937_64 (C++11)

std::mersenne_twister_engine<std::uint_fast64_t,
                             64, 312, 156, 31,
                             0xb5026f5aa96619e9, 29,
                             0x5555555555555555, 17,
                             0x71d67fffeda60000, 37,
                             0xfff7eee000000000, 43,
                             6364136223846793005>
64 位梅森旋转器,由松本和西村在 2000 年提出 [edit]

[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] 成员函数

构造和播种
构造引擎
(公共成员函数) [edit]
(C++11)
设置引擎的当前状态
(公共成员函数) [edit]
生成
推进引擎的状态,并返回生成的数值
(公共成员函数) [edit]
(C++11)
推进引擎的状态,步进指定的次数
(公共成员函数) [edit]
特征
[static] (C++11)
获取输出范围内的最小可能数值
(公共静态成员函数) [edit]
[static] (C++11)
获取输出范围内的最大可能数值
(公共静态成员函数) [edit]

[edit] 非成员函数

(C++11)(C++11)(在 C++20 中移除)
比较两个伪随机数引擎的内部状态
(函数) [edit]
对伪随机数引擎执行流输入和输出
(函数模板) [edit]

[edit] 示例