命名空间
变体
操作

std::linear_congruential_engine

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

    class UIntType,
    UIntType a,
    UIntType c,
    UIntType m

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

linear_congruential_engine 是基于 线性同余生成器 (LCG) 的随机数引擎。

目录

[编辑] 模板形参

UIntType - 生成器生成的结果类型。如果这不是 unsigned shortunsigned intunsigned longunsigned long long 之一,则效果未定义。
a - 乘数项
c - 增量项
m - 模数项

m 非零时,如果 a >= mc >= mtrue,则程序是病式的。

[编辑] 生成器属性

linear_congruential_engine 的状态的大小1,每个状态由一个整数组成。

实际模数 m0 定义如下

  • 如果 m 非零,则 m0m
  • 如果 m 为零,则 m0std::numeric_limits<result_type>::max() 的值加上 1 (这意味着 m0 不需要可表示为 result_type)。

linear_congruential_engine转移算法TA(xi) = (a·xi+c) mod m0

linear_congruential_engine生成算法GA(xi) = (a·xi+c) mod m0

用当前状态生成的伪随机数也是后继状态。

[编辑] 预定义特化

以下特化使用两个常用参数集定义了随机数引擎

定义于头文件 <random>
类型 定义
minstd_rand0 (C++11) std::linear_congruential_engine<std::uint_fast32_t,
                                16807, 0, 2147483647>

由 Lewis、Goodman 和 Miller 于 1969 年发现,并于 1988 年被 Park 和 Miller 采纳为“最小标准”[编辑]

minstd_rand (C++11)

std::linear_congruential_engine<std::uint_fast32_t,
                                48271, 0, 2147483647>
更新的“最小标准”,由 Park、Miller 和 Stockmeyer 于 1993 年推荐[编辑]

[编辑] 嵌套类型

类型 定义
result_type UIntType

[编辑] 数据成员

constexpr UIntType multiplier
[静态]
a
(公共静态成员常量)
constexpr UIntType increment
[静态]
c
(公共静态成员常量)
constexpr UIntType modulus
[静态]
m
(公共静态成员常量)
constexpr UIntType default_seed
[静态]
1u
(公共静态成员常量)

[编辑] 成员函数

构造与播种
构造引擎
(公共成员函数) [编辑]
设置引擎的当前状态
(公共成员函数) [编辑]
生成
推进引擎的状态并返回值
(公共成员函数) [编辑]
将引擎的状态推进指定的量
(公共成员函数) [编辑]
特性
[静态]
获取输出范围内最小的可能值
(公共静态成员函数) [编辑]
[静态]
获取输出范围内最大的可能值
(公共静态成员函数) [编辑]

[编辑] 非成员函数

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

[编辑] 范例