在设计抽奖一类程序中,有时会需要一种概率“有较大可能获得一个普通结果,有较小可能获得一个糟糕或极好的结果”,这就可以用正态分布函数来获得这样一个结果。
STL中已经提供了一系列随机分布的函数,包括正态分布,泊松分布等
头文件: random
函数: std::normal_distribution<type> distribution( σ,μ )
其中σ为正态分布的平均数学期望,也就是正态曲线中高峰的x值,μ值越大曲线坡度约缓,反之则越陡,在x轴上, (0,σ * μ) 占据了曲线的大部分空间,(-∞,0] 以及 [σ * μ,+∞)可以认为是数学上的不可能事件。
/* With normal distribution, we can create events like "has a great chance to get medium result, and has a little chance to get bad or too good result" */ std::default_random_engine generator; std::normal_distribution<double> distribution(5.0,2.0); generator.seed(clock()); // std pesudo also needs seed to avoid generating fixed random value. double number = distribution(generator);
需要注意,std::default_random_engine 也需要像以前的rand()一样,使用前用srand(seed)设定一个不同的种子,否则每次结果都是一样的