-
几个典型的随机数分布
uniform_int_distribution
uniform_real_distribution
normal_distribution
lognormal_distribution
bernoulli_distribution
binomial_distribution
poisson_distribution
exponential_distribution
… -
掷骰子(用蒙特卡洛生成10个在1 - 6范围内的整数)
#include <random>
...
random_device rd; //随机数生成器
mt19937 random_generator(rd()); //PRNG伪随机数生成器,种子由std :: mt19937类实现
//以上两行基本为固定格式
uniform_int_distribution <int> distribution(1, 6);
for (int i = 0; i < 10; i++)
{
int aRandomNumber = distribution(random_generator);
cout << i << "-th randomnumber is " << aRandomNumber << endl;
}
- 计算Pi
成对生成-1到1之间的随机数x,y,它们到原点的距离x^2 + y^2 <1,则说明这个点(x, y)在圆(半径为1,所以面积为Pi)的内部。这种园内点和总点数的比值,就是 圆的面积/正方形面积(2*2=4)。
void calculate_pi()
{
random_device rd;
mt19937 random_generator(rd());
uniform_real_distribution <double> dist(-1, 1);
vector<vector<int>> vector1;
double m = 0;
int n = 1000;
for (int i = 0; i < n; i++)
{
double aRandomNumber1 = dist(random_generator);
double aRandomNumber2 = dist(random_generator);
if (pow(aRandomNumber1, 2) + pow(aRandomNumber2, 2) < 1) m++;
}
cout << "pi = " << m*4 / n;
}