std:: uniform_real_distribution
|
定义于头文件
<random>
|
||
|
template
<
class
RealType
=
double
>
class uniform_real_distribution ; |
(C++11 起) | |
生成随机浮点数值 x ,这些数值在区间 [a, b) 上均匀分布,即按照概率密度函数分布:
-
P(x|a,b) =
。1 b − a
std::uniform_real_distribution
满足
随机数分布
的所有要求。
目录 |
模板参数
| RealType | - | 生成器产生的结果类型。如果该类型不是 float 、 double 或 long double 中的一种,则效果未定义。 |
成员类型
| 成员类型 | 定义 |
result_type
(C++11)
|
RealType |
param_type
(C++11)
|
参数集的类型,参见 RandomNumberDistribution 。 |
成员函数
|
(C++11)
|
构造新的分布
(公开成员函数) |
|
(C++11)
|
重置分布的内部状态
(公开成员函数) |
生成 |
|
|
(C++11)
|
生成分布中的下一个随机数
(公开成员函数) |
特征 |
|
|
(C++11)
|
返回分布参数
(公开成员函数) |
|
(C++11)
|
获取或设置分布参数对象
(公开成员函数) |
|
(C++11)
|
返回可能生成的最小值
(公开成员函数) |
|
(C++11)
|
返回可能生成的最大值
(公开成员函数) |
非成员函数
|
(C++11)
(C++11)
(removed in C++20)
|
比较两个分布对象
(函数) |
|
(C++11)
|
对伪随机数分布执行流输入和输出操作
(函数模板) |
注释
基于此分布创建闭区间 [a, b] 上的分布较为困难。使用 std:: nextafter ( b, std:: numeric_limits < RealType > :: max ( ) ) 作为第二个参数并不总是有效,因为存在舍入误差。
大多数现有实现存在一个缺陷,可能偶尔会返回
b
(
GCC #63176
LLVM #18767
MSVC STL #1074
)。最初认为这种情况仅发生在
RealType
为
float
且存在
LWG issue 2524
时,但后续研究表明
触发该缺陷并不需要满足上述任一条件
。
示例
打印10个介于1和2之间的随机数。
#include <iostream> #include <random> int main() { std::random_device rd; // 将用于获取随机数引擎的种子 std::mt19937 gen(rd()); // 使用rd()作为种子的标准梅森旋转引擎 std::uniform_real_distribution<> dis(1.0, 2.0); for (int n = 0; n < 10; ++n) // 使用dis将gen生成的随机无符号整数转换为[1,2)范围内的双精度浮点数 // 每次调用dis(gen)都会生成一个新的随机双精度浮点数 std::cout << dis(gen) << ' '; std::cout << '\n'; }
可能的输出:
1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326
外部链接
| 从区间中抽取随机浮点数 — © 2022. 弗雷德里克·古阿拉尔(Frédéric Goualard),南特大学。 |