蒙特卡洛法求Pi

来源:互联网 发布:医美网络运营总监 编辑:程序博客网 时间:2024/06/08 15:35

编程实现如下模拟:

飞镖被随机地投掷到以(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

原创粉丝点击