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>::digits

N
状态大小。 状态序列中的元素(值)数量。

M
移位大小。 每次旋转过程中要跳过的元素数量。 前提条件0 < M ≤ N

R
掩码位前提条件R ≤ W

A
XOR 掩码前提条件A ≤ (1u<<W) - 1u

U、S、T、L
调和移位参数。 在混合(调和)过程中用作移位值。 前置条件:U,S,T,L ≤ W

D、B、C
调和位掩码参数。 在混合(调和)过程中用作位掩码值。 前置条件:D,B,C ≤ (1u<<W) - 1u

F
初始化乘法器。 用于帮助初始化序列。 前置条件:F ≤ (1u<<W) - 1u

成员

mersenne_twister_engine::mersenne_twister_engine
mersenne_twister_engine::discard
mersenne_twister_engine::max
mersenne_twister_engine::min
mersenne_twister_engine::operator()
mersenne_twister_engine::seed

default_seed 是定义为 5489u 且用作 mersenne_twister_engine::seed 和单个值的构造函数的默认参数值的成员常量。

有关引擎成员的详细信息,请参阅 <random>

备注

这个类模板描述了返回闭区间 [ 0, 2W - 1] 上的值的随机数引擎。 它将保留 W * (N - 1) + R 位的较大整数值。 它从此较大值中一次提取 W 位,当它已使用所有的位时,它将通过对这些位进行移位和混合来旋转该较大值,以便生成可从中进行提取的新位集。 如果至少调用了 N 次,则引擎的状态是NW上次使用的operator()位值,否则MW使用过的 -bit 值和种子的最后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)。

typedef mersenne_twister_engine<unsigned int, 32, 624, 397,
    31, 0x9908b0df,
    11, 0xffffffff,
    7, 0x9d2c5680,
    15, 0xefc60000,
    18, 1812433253> mt19937;

mt19937_64:64 位梅森旋转引擎(Matsumoto 和 Nishimura,2000)。

typedef mersenne_twister_engine<unsigned long long, 64, 312, 156,
    31, 0xb5026f5aa96619e9ULL,
    29, 0x5555555555555555ULL,
    17, 0x71d67fffeda60000ULL,
    37, 0xfff7eee000000000ULL,
    43, 6364136223846793005ULL> mt19937_64;

有关梅森旋转算法的详细信息,请参阅 Wikipedia 文章梅森旋转

示例

有关代码示例,请参阅 <random>

要求

标头:<random>

命名空间: std

另请参阅

<random>