C++随机数,掷骰子,蒙特卡洛求Pi

  1. 几个典型的随机数分布
    uniform_int_distribution
    uniform_real_distribution
    normal_distribution
    lognormal_distribution
    bernoulli_distribution
    binomial_distribution
    poisson_distribution
    exponential_distribution

  2. 掷骰子(用蒙特卡洛生成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;
}
  1. 计算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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值