您的位置:首页 > 编程语言 > C语言/C++

C++primer 17.4 随机数

2015-11-01 19:13 225 查看
c语言的库函数 rand 生成的随机数为伪随机数。

c++提供随机数引擎类和随机数分布类

头文件: random

随机数引擎:

随机数引擎的例子:

default_random_engine e;
for (int i = 1;i <= 10;i++)
cout << e() << endl;//e()对象生成下一个随机数


随机数引擎操作

default_random_engine e;//默认构造函数
default_random_engine e(100);//100为随机种子
e.seed(100);//100为随机种子
cout << e.min() << endl;//引擎能生成的最小值
cout << e.max() << endl;//引擎能生成的最大值


分布类型:

为了得到一定范围内的数,使用分布类型的对象:

uniform_int_distribution<unsigned> u(1, 100);
default_random_engine e;
for (int i = 1;i <= 10;i++)
cout << u(e) << endl;


为了得到随机序列引擎和分布对象定义为static的:

static uniform_int_distribution<unsigned> u(1, 100);
static default_random_engine e;
for (int i = 1;i <= 10;i++)
cout << u(e) << endl;


设置随机数种子:

可以使用系统的时间函数

default_random_engine e(time(0));


随机初始化的种子。

其他随机数分布

生成随机实数:

default_random_engine e(time(0));
uniform_real_distribution<double> v(0,1);//随机实数的函数

for (int i = 1;i <= 10;i++)
cout << v(e) << endl;


非均匀分布的随机数

c++支持非均匀分布的随机数,新标准库定义20种分布类型,下面介绍一个正态分布的一个函数:

normal_distribution

例子:

default_random_engine e(time(0));
normal_distribution<> n(4,1.5);//均值为4,标准差1.5
for (int i = 1;i <= 10;i++)
{
int t = n(e);
for (int j = 1;j <= t;j++)
cout << "*";
cout << endl;

}




bernoulli_distribution 类

用来随机产生bool值,默认概率为0.5-0.5,可修改:

default_random_engine e(time(0));
bernoulli_distribution b;
cout << b(e) << endl;


true的概率修改为99%

default_random_engine e(time(0));
bernoulli_distribution b(.99);
cout << b(e) << endl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  random c++ 随机数