C++ 参考手册

位置:首页 > C++ 参考手册 >数值库 >伪随机数生成 > std::uniform_real_distribution

定义于头文件 <random>
template< class RealType = double >
class uniform_real_distribution;
(C++11 起)

产生均匀分布在区间 [a, b) 上的随机浮点值 i ,分布按照概率密度函数:

P(i|a,b) =
1
b − a
.

std::uniform_real_distribution 满足随机数分布 (RandomNumberDistribution) 的所有要求。

模板形参

RealType - 生成器所生成的结果类型。若它不是 floatdoublelong double 之一则效果未定义。


成员类型

 
成员类型 定义
result_type RealType
param_type 参数集的类型,见随机数分布 (RandomNumberDistribution)

成员函数

构造新分布
(公开成员函数)
重置分布的内部状态
(公开成员函数)
生成
生成分布中的下个随机数
(公开成员函数)
特征
返回分布参数
(公开成员函数)
获取或设置随机参数对象
(公开成员函数)
返回最小的潜在生成值
(公开成员函数)
返回最大的潜在生成值
(公开成员函数)

非成员函数

比较两个分布对象
(函数)
执行伪随机数分布的流输入和输出
(函数模板)

注意

为创建闭区间 [a,b] 上的分布,可以 std::nextafter(b, std::numeric_limits<RealType>::max()) 为第二参数。

某些既存实现拥有漏洞,若 RealTypefloat 则它们有时返回 b GCC #63176 LLVM #18767 。此为 LWG 问题 2524 所导致。

示例

打印 10 个 1 与 2 间的随机数

#include <random>
#include <iostream>
 
int main()
{
    std::random_device rd;  // 将用于获得随机数引擎的种子
    std::mt19937 gen(rd()); // 以 rd() 播种的标准 mersenne_twister_engine
    std::uniform_real_distribution<> dis(1, 2);
    for (int n = 0; n < 10; ++n) {
        // 用 dis 变换 gen 生成的随机 unsigned int 为 [1, 2) 中的 double
        std::cout << dis(gen) << ' '; // 每次调用 dis(gen) 都生成新的随机 double
    }
    std::cout << '\n';
}

可能的输出:

1.80829 1.15391 1.18483 1.38969 1.36094 1.0648 1.97798 1.27984 1.68261 1.57326