码迷,mamicode.com
首页 > 其他好文 > 详细

随机数

时间:2018-07-19 18:12:56      阅读:163      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!