栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习笔记——std::uniform

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习笔记——std::uniform

  • 头文件:#include

  • 作用:随机生成一个整数i,根据分布概率函数 P ( i ∣ a , b ) = 1 b − a + 1 P(i|a,b)=frac{1}{b-a+1} P(i∣a,b)=b−a+11​均匀分布在一个闭区间**[a, b]**

  • 用法:

    #include 
    #include 
    using namespace std;
    
    int main(int argc, char const* argv[])
    {
        random_device rd; // 用于随机数引擎获得随机种子
        std::mt19937 gen(rd()); // 以rd()为种子的标准mersenne_twister_engine
        uniform_int_distribution distribute(1, 6);
        for (int i = 0; i < 10; ++i) {
            cout << distribute(gen) << " ";
        }
        cout << endl;
    }
    

    输出:

    4 5 3 6 1 4 6 4 6 6
    

    由于是伪随机算法,所以每次运行生成的随机数都是一样的

    以下使用时间函数可生成真随机数:

    #include 
    #include 
    #include 
    using namespace std;
    
    int main(int argc, char const* argv[])
    {
        random_device rd; // 用于随机数引擎获得随机种子
        std::mt19937 gen((unsigned int)time(NULL)); // 以(unsigned int)time(NULL)为种子的标准mersenne_twister_engine,每次都是不同的
        uniform_int_distribution distribute(1, 6);
        for (int i = 0; i < 10; ++i) {
            cout << distribute(gen) << " ";
        }
        cout << endl;
    }
    
  • 注:

    • random_device:

      • std::random_device是一个均匀分布的整数随机数生成器,它产生非确定性随机数。
      • std::random_device如果非确定性源(例如硬件设备)对实现不可用,则可以根据实现定义的伪随机数引擎来实现。在这种情况下,每个std::random_device对象都可以生成相同的数字序列。
    • std::mt19937:

        typedef mersenne_twister_engine<
          uint_fast32_t,
          32, 624, 397, 31,
          0x9908b0dfUL, 11,
          0xffffffffUL, 7,
          0x9d2c5680UL, 15,
          0xefc60000UL, 18, 1812433253UL> mt19937;
      

      梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。

      Mersenne Twister有以下优点:随机性好,在计算机上容易实现,占用内存较少(mt19937的C程式码执行仅需624个字的工作区域),与其它已使用的伪随机数发生器相比,产生随机数的速度快、周期长,可达到219937-1,且具有623维均匀分布的性质,对于一般的应用来说,足够大了,序列关联比较小,能通过很多随机性测试。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号