通过带进位减法(滞后型斐波那契)算法生成随机序列。
template<class UIntType, size_t W, size_t S, size_t R> class subtract_with_carry_engine;
参数
UIntType
无符号的整数结果类型。 有关可能的类型,请参阅 <random>。W
字大小。 状态序列的每个字的大小(以字节为单位)。 前置条件:0 < W ≤ numeric_limits<UIntType>::digitsS
短滞后。 整数值数。 前置条件:0 < S < RR
长滞后。 确定生成的系列中的重复。
Members
subtract_with_carry_engine::subtract_with_carry_engine |
subtract_with_carry_engine::min |
subtract_with_carry_engine::discard |
subtract_with_carry_engine::operator() |
subtract_with_carry_engine::max |
subtract_with_carry_engine::seed |
default_seed 是定义为 19780503u 且用作 subtract_with_carry_engine::seed 和单个值的构造函数的默认参数值的成员常量。 |
有关引擎成员的详细信息,请参阅 <random>。
备注
substract_with_carry_engine 模板类是 linear_congruential_engine 上的改进。 这两个引擎的速度和结果的质量都不如 mersenne_twister_engine。
此引擎使用重复关系(周期)x(i) = (x(i - R) - x(i - S) - cy(i - 1)) mod M 产生用户指定的无符号整型值,其中如果 x(i - S) - x(i - R) - cy(i - 1) < 0,则 cy(i) 包含值 1;如果 0,则 M 包含 2W。 引擎状态是进位指示器加上 R 值。 如果已调用 operator() 至少 R 次,则这些值将包含返回的最后 R 个值,否则包含已返回的 N 个值和种子的最后 R - N 个值。
模板参数 UIntType 必须大到足以保留最多 M - 1 个值。
虽然你可以从此引擎直接构造生成器,但你也可以使用下表中预定义的 typedef 之一。
名称 |
描述 |
---|---|
ranlux24_base |
用作 ranlux24 的基础。
|
ranlux48_base |
用作 ranlux48 的基础。
|
有关带进位减法引擎算法的详细信息,请参阅 Wikipedia 文章滞后型斐波那契生成器。
要求
标头:<random>
命名空间: std