命名空间
变体
操作

std::linear_congruential_engine

来自 cppreference.com
< 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,每个状态都包含一个整数。

实际模数 m
0
的定义如下:

  • 如果 m 不为零,m
    0
    m
  • 如果 m 为零,m
    0
    std::numeric_limits<result_type>::max() 加上 1(这意味着 m
    0
    不需要表示为 result_type)。

linear_congruential_engine转换算法TA(x
i
) = (a·x
i
+c) mod m
0
.

linear_congruential_engine生成算法GA(x
i
) = (a·x
i
+c) mod m
0
.

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

[编辑] 预定义特化

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

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

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

minstd_rand (C++11)

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

[编辑] 嵌套类型

类型 定义
result_type UIntType

[编辑] 数据成员

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

[编辑] 成员函数

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

[编辑] 非成员函数

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

[编辑] 示例