c++随机数引擎全解

本文深入探讨C++的随机数引擎,包括C标准的线性同余法、C++11引入的梅森旋转生成器mt19937,以及随机数分布和带进位减法的概念。文中详细介绍了各种随机数生成器的工作原理,如minstd_rand0、minstd_rand和mt19937,并讨论了它们的优缺点和应用场景。
摘要由CSDN通过智能技术生成

看这个的默认了解基础的随机数生成。

c标准随机数方法

        使用经典线性同余算法(linear congruential method),大部分随机数的生成使用这种方法,经典代码如下:

#include <iostream>
#include <cstdio>
#include <random>
#include <ctime>
using namespace std;

int main(){
    srand(time(0));
    cout<<rand()<<endl;
    return 0;
}

        其中srand()传入种子为 unsigned int 类型,随机数种子的最小单位为秒,注意如果使用时间作为种子时,要让不同的随机数生成间隔超过一秒,或者自己生成随机数。

        本方法现在通常作为随机数种子生成器。

生成范围:0~32767(2^15)

C++(random)

mt19937(c11)

        使用梅森旋转生成器,属于"mersenne_twister_engine"内容,由于是最为常用的随机数生成器,因此首先介绍。

        梅森旋转生成器19937来自于周期预估长度高达19937位,理论足够包含整个宇宙粒子数,因此发明者骄傲的命名为19937,mt为Mersenne Twister的简写。用于生成32位大小的随机数,c++同时提供了64位的生成方法mt19937_64。其中19937为梅森素数,恰好位于第24位,也即2^19937 - 1 为梅森素数。这项成果被发表在1971年的一篇文章中。

        简单例子:

#include <iostream>
#include <cstdio>
#include <ctime>
#include <random>
using namespace std;

int main(){
    random_device rd;  //Will be used to obtain a seed for the random number engine
    mt19937 gen(rd()); //Standard mersenne_twister_engine seeded with rd()
    uniform_int_distribution<int> distrib(1, 27);
    for (int n = 0; n <= 7; ++n)
        std::cout << distri
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值