编程实现如下模拟:
飞镖被随机地投掷到以(1,1)和(-1,-1)为对角的正方形内。若飞镖落在单位圆内【即以(0,0)为圆心,1为半径的圆】,算命中。否则未命中。
运行这个模拟并用它求PI的近似值。
模型如下图所示:
[cpp] view plain copy
- // 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函数是随机数发生器的初始化函数。
- */
- }
|