mt19937 伪随机数生成器
1. 算法简介
std::mt19937
是伪随机数产生器,用于产生高性能的随机数。C++ 11 引入,返回值为 unsigned int
。这个伪随机数产生器基于 Mersenne Twister 算法,其周期可达到 ,其定义在 <random>
头文件中。
std::mt19937
接收一个 unsigned int
数作为种子,定义如下:
cpp
std::mt19937 mt_rand(std::random_device{}());
std::mt19937 mt_rand(time(0));
std::mt19937 mt_rand(std::chrono::system_clock::now().time_since_epoch().count());
其中 time()
是定义在 C 语言库 <time.h>
中的时间函数,返回当前秒数。
std::chrono::system_clock::now().time_since_epoch().count()
则是返回当前的纳秒数,但最后三位数永远是零,计算机不会计算比微秒更精确的时间。
2. 产生均匀的随机数
示例代码:
cpp
#include <iostream>
#include <random>
using namespace std;
int main() {
mt19937 rng{random_device{}()};
uniform_real_distribution<double> uni{0, 1};
cout << uni(rng) << endl;
}
3. 常见分布
- 均匀分布
uniform_int_distribution
uniform_real_distribution
- 正态分布
normal_distribution
- 伯努利分布
binomial_distribution