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 或 long double 之一则效果未定义。
 
  | 
成员类型
| 成员类型 | 定义 | 
  result_type
 | 
RealType | 
  param_type
 | 
参数集的类型,见随机数分布 (RandomNumberDistribution) 。 | 
成员函数
|   构造新分布  (公开成员函数)  | |
|   重置分布的内部状态  (公开成员函数)  | |
 生成 | |
|   生成分布中的下个随机数  (公开成员函数)  | |
 特征 | |
|   返回分布参数  (公开成员函数)  | |
|   获取或设置随机参数对象  (公开成员函数)  | |
|   返回最小的潜在生成值  (公开成员函数)  | |
|   返回最大的潜在生成值  (公开成员函数)  | |
非成员函数
|   比较两个分布对象  (函数)  | |
|   执行伪随机数分布的流输入和输出  (函数模板)  | 
示例
运行此代码
#include <iostream> #include <iomanip> #include <string> #include <map> #include <random> #include <cmath> int main() { std::random_device rd{}; std::mt19937 gen{rd()}; // 值最可能接近平均 // 标准差影响生成的值距离平均数的分散 std::normal_distribution<> d{5,2}; std::map<int, int> hist{}; for(int n=0; n<10000; ++n) { ++hist[std::round(d(gen))]; } for(auto p : hist) { std::cout << std::setw(2) << p.first << ' ' << std::string(p.second/200, '*') << '\n'; } }
可能的输出:
-2 -1 0 1 * 2 *** 3 ****** 4 ******** 5 ********** 6 ******** 7 ***** 8 *** 9 * 10 11 12
外部链接
- Weisstein, Eric W. “正态分布”来自 MathWorld--A Wolfram Web Resource 。
 - 正态分布来自维基百科。