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 是基于线性同余生成器的随机数引擎。

模板形参

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>
由 Lewis、Goodman 及 Miller 发现于 1969,由 Park 与 Miller 于 1988 采纳为“最小标准”

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++11)
获取输出范围中的最小可能值
(公开静态成员函数)
[静态] (C++11)
获取输出范围中的最大可能值
(公开静态成员函数)

非成员函数

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

示例