subtract_with_carry_engine 类

通过带进位减法(滞后型斐波那契)算法生成随机序列。

语法

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

S
短滞后。 整数值数。 前提条件0 < S < R

R
长滞后。 确定生成的系列中的重复。

成员

subtract_with_carry_engine::subtract_with_carry_engine subtract_with_carry_engine::max
subtract_with_carry_engine::min
subtract_with_carry_engine::discard
subtract_with_carry_engine::operator()
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产生用户指定的无符号整型值,其中如果 cy(i),则 1 包含值 x(i - S) - x(i - R) - cy(i - 1) < 0;如果 0,则 M 包含 2W。引擎状态是进位指示器加上 R 值。 如果已调用 operator() 至少 R 次,则这些值将包含返回的最后 R 个值,否则包含已返回的 N 个值和种子的最后 R - N 个值。

模板参数 UIntType 必须大到足以保留最多 M - 1 个值。

虽然可以从此引擎直接构造生成器,但也可以使用预定义的 typedef 之一:

ranlux24_base:用作 ranlux24 的基础。 typedef subtract_with_carry_engine<unsigned int, 24, 10, 24> ranlux24_base;

ranlux48_base:用作 ranlux48 的基础。 typedef subtract_with_carry_engine<unsigned long long, 48, 5, 12> ranlux48_base;

有关带进位减法引擎算法的详细信息,请参阅 Wikipedia 文章滞后斐波纳契生成器

要求

标头:<random>

命名空间: std

另请参阅

<random>