モンテカルロ法はPiを求めます
1413 ワード
プログラミングは次のシミュレーションを実現します.
ダーツはランダムに(1,1)と(-1,-1)を対角とする正方形内に投げ込まれます.ダーツが単位円内に落ちた場合(すなわち(0,0)を中心とし、1を半径とする円)、占い中です.そうしないと命中しません.
このシミュレーションを実行し、PIの近似値を求めます.
モデルは次の図のようになります.
http://blog.csdn.net/smsmn/article/details/6338925
ダーツはランダムに(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