蒙特卡洛法求Pi

编程实现如下模拟:

飞镖被随机地投掷到以(1,1)和(-1,-1)为对角的正方形内。若飞镖落在单位圆内【即以(0,0)为圆心,1为半径的圆】,算命中。否则未命中。

运行这个模拟并用它求PI的近似值。

 

模型如下图所示:

 

// Circle_PI.cpp : 定义控制台应用程序的入口点。
//

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>

using namespace std;

const int MAX_DAST=100000;		//投掷总数

double rand_double(double a,double b);

void rand_seed();				//设置随机数的种子

int main(void)
{

	int PI_DAST=0;	//投掷在圆里面的总数

	rand_seed();

	for(int i=0;i<MAX_DAST;i++)
	{
		double x=rand_double(-1,1);
		double y=rand_double(-1,1);
		if( x*x+y*y<=1)
			PI_DAST++;
	}

	double PI=PI_DAST*4.0/MAX_DAST;

	cout<<fixed;

	cout<<"PI="<<PI<<endl;

	system("pause");

	return 0;
}

/**
	生成某一区域内的随机浮点数
	@param a 该区域的下边界
	@param b 该区域的上边界
	@param return 随机浮点数x,x∈[a,b]
*/
double rand_double(double a,double b)
{
	return a+(b-a)*rand()*1.0/RAND_MAX;
	/*
	RAND_MAX是VC中stdlib.h中宏定义的一个字符常量:  
	#define RAND_MAX 0x7FFF  
	其值最小为32767,最大为2147483647   
	通常在产生随机小数时可以使用RAND_MAX。
	*/
}

/**
	设置随机数生成器的种子
*/
void rand_seed()
{
	int seed=static_cast<int>(time(0));				//返回的是系统的时间
	srand(seed);
	/*
	rand()产生伪随机数。srand函数提供种子,种子不同产生的随机数序列也不同,所以通常先调用srand函数,将time(0)的结果设置成种子。
	srand函数是随机数发生器的初始化函数。
	*/
}

http://blog.csdn.net/smsmn/article/details/6338925

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值