最近碰到了c++生成正态随机数的问题,在这里把查到的资料整理一下。
正态随机数最便捷的方法是使用libstdc++,在C++11. 26.5-1版本后标准库中已经加入了<random>来处理对随机数的生成。下面的代码就是一个简单的生成过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include <random>
#include <time.h>
#include <iostream>
typedef std::ranlux64_base_01 Myeng;
typedef std::normal_distribution<double> Mydist;
int main( int argc, char* args[] )
{
Myeng eng;
eng.seed(time(NULL));//将时间作为seed
Mydist dist(1.5, 2.0);
Mydist::input_type engval = eng();
Mydist::result_type distval = dist(eng);
distval = distval; // 防止出现"xxxx未使用"的报错
engval = engval;
std::cout<<d<<std::endl;
std::cout << "期望== " << dist.mean() << std::endl;
std::cout << "标准差== " << dist.sigma() << std::endl;
dist.reset(); // 清除缓存值
std::cout << "随机数1 == " << dist(eng) << std::endl;
std::cout << "随机数2 == " << dist(eng) << std::endl;
std::cout << "随机数3 == " << dist(eng) << std::endl;
} |
关于random库的更多的内容可参照参考文档,文字太多了我也没仔细看,只是参照别人的代码改了下就拿来用了。
当然,如果你没有使用标准库的习惯的话(其实本人也不是很喜欢用标准库),你也[......]阅读全文