Rand

Rand

mt19937 #

std::mt19937是伪随机数产生器,用于产生高性能的随机数。 C++11引入。返回值为unsigned int。

mt 是Mersenne Twister算法译为马特赛特旋转演算法,是伪随机数发生器之一,其主要作用是生成伪随机数。发明于1997年。

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

随机数生成的用法 #

生成5个随机数

#include <iostream>
#include <random>

using namespace std;

int main()
{
    std::mt19937 rng(std::random_device{}());
    for (int i = 0; i < 5; i++) {
        cout << rng() << endl;
    }

    return 0;
}

生成均匀分布的随机数

#include <iostream>
#include <random>

using namespace std;

int main()
{
    std::mt19937 rng(std::random_device{}());
    std::uniform_int_distribution<> uni_int(1, 100);
    for (int i = 0; i < 5; i++) {
        cout << uni_int(rng) << endl;
    }

    return 0;
}

【参考文献】 #

  1. 自研实现 & boost实现:https://blog.csdn.net/caimouse/article/details/55668071
  2. MT算法原理:http://www.cppblog.com/Chipset/archive/2009/01/19/72330.html
  3. 用法文档(官):https://zh.cppreference.com/w/cpp/numeric/random