随机数和概率分布<random>
重要概念
1,引擎,能够产生随机的根据最大最小值均匀分布的无符号值的函数对象,随机数生成器
default_random_engine dre1;//默认的初始化的引擎产生的数是定义好了的,不是随机的
default_random_engine dre2(seed);//随机的
2,分布,引擎产生的随机值按某种分布产生最后的随机数;线性、正态、指数、伽马、伯努利等分布
uniform_int_distribution<int> d(10,20);//产生整数基于范围为[10,20]的均匀分布,不指定范围则为[0,numeric_limits<type>::max()]
uniform_real_distribution<double> dd;//产生浮点数,默认范围为[0.0,1.0)
dd(dre);//产生随机数
shuffle (v.begin(), v.end(), dre);//将容器某范围的值随机交换
引擎是状态相关的,即如果引擎状态相同则产生的随机数是相同的,为此可以设置特定的不可预测的操作来获取不同的状态,从而产生不可预测的随机数;可预测的随机数可以用来做测试集。
随机引擎产生的随机值不是随机数,需通过分布和随机值共同产生随机数
default_random_engine引擎在不同平台下可能产生不同的随机序列值
分布的参数传递
uniform_int_distribution<> d(0, 20); // initialize parameters ‘‘a’’ and ‘‘b’’
d.a() // yields value of parameter ‘‘a’’
d.b() // yields value of parameter ‘‘b’’
d.param().a() // yields value of parameter ‘‘a’’
d.param().b() // yields value of parameter ‘‘b’’
或者将参数作为一个整体传递
uniform_int_distribution<>::param_type pt(100, 200); // other parametrization
d(e,pt) // generates one value according to parametrization pt
d.param(pt); // let all generated values use parametrization pt
复数
<complex>
使用cin输入复数时
1,只输入实部可以不加()
2,输入完整的复数(real,imaginary)
使用cout输出复数时
输出(real,imaginary)
数值函数