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;
}
【参考文献】 #
- 自研实现 & boost实现:https://blog.csdn.net/caimouse/article/details/55668071
- MT算法原理:http://www.cppblog.com/Chipset/archive/2009/01/19/72330.html
- 用法文档(官):https://zh.cppreference.com/w/cpp/numeric/random