モンテカルロ法はPiを求めます

1413 ワード

プログラミングは次のシミュレーションを実現します.
ダーツはランダムに(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