c/c++语言开发共享C++随机数引擎

C++的随机数引擎有以下几个要点需要注意: 1、随机数发生器使用同一种子会生成相同序列的随机数序列 2、为了让程序每次运行都会生成不同的随机结果,我们可以使用 time(0) 产生一个随机数种子 3、我们必须传递引擎本身给分布对象,因为有些分布可能需要调用引擎多次才能得出结果 以下是几种随机分布: …

c++的随机数引擎有以下几个要点需要注意:

   1、随机数发生器使用同一种子会生成相同序列的随机数序列

  2、为了让程序每次运行都会生成不同的随机结果,我们可以使用 time(0) 产生一个随机数种子

  3、我们必须传递引擎本身给分布对象,因为有些分布可能需要调用引擎多次才能得出结果

 

以下是几种随机分布:

  1、均匀分布:(1) 产生随机整数:uniform_int_distribution<[type]> u[(range)]

           (2) 产生随机小数:uniform_real_distribution<[type]> u[(range)]

   2正态分布:normal_distribution<[type]> n(e, d)

   3伯努利分布:bernoulli_distribution b[(概率)],返回 bool 值,且返回 true 的概率为常数,默认为 0.5 

 

注:这些随机分布都包含在头文件 random 里面

 

 

#include <iostream>  #include <cstdlib>   #include <ctime>  #include <cmath>  #include <random>  #include <vector>    using namespace std;    int main()  {      static default_random_engine e;  //    返回该引擎能生成的最小及最大值       cout<<"min: "<<e.min()<<ends<<"max: "<<e.max()<<endl;        //    time 返回以秒计的时间       e.seed(time(0));            static uniform_int_distribution<unsigned> u(0, 9);      cout<<"生成[0,9]的3个随机整数为:";       for (size_t i = 0; i < 3; ++i)          cout<<u(e)<<ends;      cout<<endl;            /*          u.min() 和 u.max() 返回 u(e) 能生成的最小和最大值          u.reset() 重建 u 的状态,使随后对 u 的使用不依赖于 u 已经生成的值       */                static uniform_real_distribution<double> r(0, 1);      cout<<"生成[0, 1]的3个随机小数为:";      for (size_t i = 0; i < 3; ++i)          cout<<r(e)<<ends;      cout<<endl;            static normal_distribution<> n(4, 1.5);      cout<<"正态分布个数统计:"<<endl;      vector<unsigned> vals(9);      for (size_t i = 0; i != 100; ++i){  //        cmath 的 lround 函数把值舍入到最接近的整数           unsigned v = lround(n(e));          if (v < vals.size())              ++vals[v];      }      for (size_t i = 0; i < vals.size(); ++i)          cout<<i<<":t"<<vals[i]<<endl;            //     返回 true 的概率为 0       static bernoulli_distribution b(0);      for (size_t i = 0; i < 3; ++i)          cout<<boolalpha<<b(e)<<noboolalpha<<ends;      cout<<endl;            system("pause");                return 0;  }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/604486.html

(0)
上一篇 2021年5月12日
下一篇 2021年5月12日

精彩推荐