第一范文网 - 专业文章范例文档资料分享平台

蒲丰氏投针计算圆周率

来源:用户分享 时间:2025/12/19 4:06:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

用C语言计算蒲丰氏投针计算圆周率

#include #include main() {

int n1=0,n,i;double rand_num1,rand_num2; printf(\:\printf(\for(i=0;i

rand_num1=(double)time(0)*rand(); while(rand_num1>1)rand_num1-=2; rand_num2=(double)time(0)*rand(); while(rand_num2>1)rand_num2-=2;

if(rand_num1*rand_num1+rand_num2*rand_num2<1) n1++; }

printf(\\\n\

/* n1/n=π/4 距离小于1就是在圆里,取点范围在(-1,-1)到(1,1)的正方形里 */ }

MATLAB计算蒲丰氏投针计算圆周率(蒙特卡罗方法)

clear a=1; l=0.6; counter=0;

n=10000000;% 投掷次数

x=unifrnd(0,a/2,1,n);%产生n个(0,a/2)之间均匀分布的随机数,这里a/2是投针的中点到最近的平行线的距离

phi=unifrnd(0,pi,1,n);% 产生n个(0,pi)之间均匀分布的随机数,这里pi是投针到最近的平行线的角度 for i=1:n

if x(i)

frequency=counter/n; % 计算相交的频率,即相交次数比总次数 Pi=2*l/(a*frequency) % 从相交的频率总求的pi %运行结果 >> test Pi = 3.1416

一个蒲峰问题的蒙特卡罗方法实现的C语言程序。如下 #include #include #include #include

using namespace std;

///////////////////////////////////////// //

//the rand function

////////////////////////////////////////// double Rand2(int &idum) {

const unsigned long IM1=2147483563,IM2=2147483399;

const unsigned long IA1=40014,IA2=40692,IQ1=53668,IQ2=52774; const unsigned long IR1=12211,IR2=3791,NTAB=32,IMM1=IM1-1; const unsigned long NDIV=1+IMM1/NTAB;

const double EPS=3.0e-16,AM=1.0/IM1,RNMX=(1.0-EPS); static int iy=0,idum2=314159265; static vector iv(NTAB); int j,k;

double temp;

if ( idum <=0 ) {

idum=(idum ==0 ? 1 : -idum); idum2=idum;

for ( j=NTAB+7; j>=0; j--) {

k=idum/IQ1;

idum=IA1*(idum-k*IQ1)-k*IR1; if (idum < 0) idum+=IM1; if (j < NTAB) iv[j] = idum; }

iy=iv[0]; }

k=idum/IQ1;

idum=IA1*(idum-k*IQ1)-k*IR1;

if (idum < 0) idum += IM1; k=idum2/IQ2;

idum2=IA2*(idum2-k*IQ2)-k*IR2; if (idum2 < 0) idum2 +=IM2; j = iy/NDIV; iy = iv[j]-idum2; iv[j] = idum;

if (iy < 1) iy += IMM1;

if ((temp=AM*iy)>RNMX ) return RNMX; else return temp; }

///////////////////////////////////////////

float main() // check prog { const float a=3,l=2.5; double pi; int N=0; float x,y;

long n;

int kaka=12;

cout<<\ cin>>n;

for(int i=1;i<=n;++i) {

x=Rand2(kaka); y=Rand2(kaka);

if((a*x)<=(l*sin(y*3.14))) {N=N+1;} }

cout<

cout<<\return 0; }

搜索更多关于: 蒲丰氏投针计算圆周率 的文档
蒲丰氏投针计算圆周率.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c54w3g98qa13fre38i3u0_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top