std::normal_distribution
来自cppreference.com
在标头 <random> 定义 | ||
template<class RealType =double> class normal_distribution; | (C++11 起) | |
生成服从正态(高斯)随机数分布的随机数。它定义为:
- f(x; μ,σ) =
exp⎛1 σ√2π
⎜
⎝
⎛-1 2
⎜
⎝
⎞x-μ σ
⎟
⎠2
⎞
⎟
⎠
此处 μ 为均值 (mean) 而 σ 为标准差 (stddev)。
std::normal_distribution
满足随机数分布(RandomNumberDistribution) 的所有要求。
目录 |
[编辑]模板形参
RealType | - | 生成器所生成的结果类型。如果它不是 float、double 或 longdouble 之一,那么效果未定义。 |
[编辑]成员类型
成员类型 | 定义 |
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)(C++20 移除) | 比较两个分布对象 (函数) |
(C++11) | 执行伪随机数分布的流输入和输出 (函数模板) |
[编辑]示例
运行此代码
#include <cmath>#include <iomanip>#include <iostream>#include <map>#include <random>#include <string> int main(){std::random_device rd{};std::mt19937 gen{rd()}; // 接近均值的值最有可能。// 标准差影响生成的值距离均值的分散程度。 std::normal_distribution d{5.0, 2.0}; // 从正态分布中抽取一个样本,并将其舍入为整数auto random_int =[&d, &gen]{returnstd::lround(d(gen));}; std::map<long, unsigned> histogram{};for(auto n{10000}; n;--n)++histogram[random_int()]; for(constauto[k, v]: histogram)std::cout<<std::setw(2)<< k <<' '<<std::string(v /200, '*')<<'\n';}
可能的输出:
-1 0 1 * 2 *** 3 ****** 4 ******** 5 ********** 6 ******** 7 ***** 8 *** 9 * 10 11
[编辑]外部链接
1. | Weisstein, Eric W. “正态分布” 来自 MathWorld — A Wolfram Web Resource。 |
2. | 正态分布 — 来自维基百科。 |