蒙特卡洛法求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函数是随机数发生器的初始化函数。 */ }

你可能感兴趣的:(蒙特卡洛法求Pi)