标签:size 通过 特定 def 结果 sig bsp 概率 div
定义在random中的随机数库通过一组协作的类来生成随机数:random-number-engines(可以生成unsigned随机数序列)和random-number-distribution(使用引擎返回服从特定概率分布的随机数)。二者都是函数对象类。
1 default_random_engine e;//生成随机无符号数 2 for(size_t i=0;i<5;i++){ 3 cout<< e() <<" "; 4 }
运行结果为 16807 282475249 1622650073 984943658 1144108930 ;
为了得到在指定范围内的随机数,需要使用random-number-distribution:
1 uniform_int_distribution<unsigned> u(0,9); 2 default_random_engine e; 3 for(size_t i=0;i<5;i++){ 4 cout<<u(e)<<" ";//将u作为随机数源 5 }
运行结果为 0 1 7 4 5
在函数中生成随机数时,可以将引擎和关联的分布对象定义为static的(保持状态),从而避免每次生成相同的随机数序列。
为引擎设置种子:(1)创建引擎对象时设置(2)调用引擎的seed成员
1 default_random_engine e3; 2 e3.seed(54546); 3 default_random_engine e4(54546); 4 default_random_engine e5(time(0));
生成非均匀分布的随机数(正态分布)
1 default_random_engine e1; 2 normal_distribution<> n(4,1.5); 3 vector<unsigned> vals(9); 4 for(size_t i=0;i!=200;i++){ 5 unsigned v=lround(n(e1)); 6 if(v<vals.size()) 7 vals[v]++; 8 } 9 for(size_t j=0;j!=vals.size();j++) 10 { 11 cout<<j<<": "<<string(vals[j],‘*‘)<<endl; 12 13 }
结果
0: ***
1: ********
2: ********************
3: **************************************
4: **********************************************************
5: ******************************************
6: ***********************
7: *******
8: *
标签:size 通过 特定 def 结果 sig bsp 概率 div
原文地址:https://www.cnblogs.com/betterthanyou/p/9337222.html