主题:将C语言编写的蒙特卡罗方法求解圆周率改写为fortran语言
zzlovejyt [专家分:0] 发布于 2012-11-29 21:37:00
说明:本例中先取0到20000之间的随机数,然后再用这些点除以10000即可得到0到2之间的随机数,随机数精度为五位有效数。
以下是用c++语言模拟的求解圆周率的程序:
#include <iostream>
#include <iomanip> //setw函数,setprecision函数
#include <time.h> //time函数
#include <stdlib.h> //srand,rand函数
using namespace std;
int main()
{
int dwCount;
cout<<"请输入打点的数目"<<endl;
cin>>dwCount; //自己输入所要取的点数。
double j,k;
double x,y;
double m=0;
for(int i=0;i<dwCount;i++)
{
j=(int)(20000.0*rand()/(RAND_MAX+0));//取从0到20000之间的随机数
k=(int)(20000.0*rand()/(RAND_MAX+0));//取从0到20000之间的随机数
x=j/10000; /*用刚才所取得随机数除以10000就是0到2之间的随机数,5位有效数字,代表横坐标*/
y=k/10000; /*用刚才所取得随机数除以10000就是0到2之间的随机数,5位有效数字,代表纵坐标*/
if(((x-1)*(x-1)+(y-1)*(y-1))<=1) //判断所取得点是否在圆内
{
m++; //如果这个所取得点在圆内,则计数器加1
}
cout<<x<<" "<<y<<endl; /*输出所取得随机数,没有实际意义,只为了直观的看见所取得随机数*/
}
cout<<m<<endl;
double s=m/dwCount; //用圆内的点数除以所取得点数,得到一个比例
cout<<s<<endl;
double t=4*s; /*用刚才的点数乘以4就是圆的面积,因为这里做了特殊,所以这个值也就是圆周率*/
cout<<t<<endl; //输出圆周率
return 0;
}
以下是用c++语言模拟的求解圆周率的程序:
#include <iostream>
#include <iomanip> //setw函数,setprecision函数
#include <time.h> //time函数
#include <stdlib.h> //srand,rand函数
using namespace std;
int main()
{
int dwCount;
cout<<"请输入打点的数目"<<endl;
cin>>dwCount; //自己输入所要取的点数。
double j,k;
double x,y;
double m=0;
for(int i=0;i<dwCount;i++)
{
j=(int)(20000.0*rand()/(RAND_MAX+0));//取从0到20000之间的随机数
k=(int)(20000.0*rand()/(RAND_MAX+0));//取从0到20000之间的随机数
x=j/10000; /*用刚才所取得随机数除以10000就是0到2之间的随机数,5位有效数字,代表横坐标*/
y=k/10000; /*用刚才所取得随机数除以10000就是0到2之间的随机数,5位有效数字,代表纵坐标*/
if(((x-1)*(x-1)+(y-1)*(y-1))<=1) //判断所取得点是否在圆内
{
m++; //如果这个所取得点在圆内,则计数器加1
}
cout<<x<<" "<<y<<endl; /*输出所取得随机数,没有实际意义,只为了直观的看见所取得随机数*/
}
cout<<m<<endl;
double s=m/dwCount; //用圆内的点数除以所取得点数,得到一个比例
cout<<s<<endl;
double t=4*s; /*用刚才的点数乘以4就是圆的面积,因为这里做了特殊,所以这个值也就是圆周率*/
cout<<t<<endl; //输出圆周率
return 0;
}