用C语言编个程序,求π(派)

[复制链接]
查看11 | 回复3 | 2007-11-25 11:35:52 | 显示全部楼层 |阅读模式
#include#include#include #include main (){ int x,y;long i,m=0;double d,r=32767;float pi,n=5000000;srand (time(0));for(i=0;i<n;i++){x=rand(); y=rand();d=sqrt(x*x+y*y); if (d<r) {m=m+1;} } printf("m=%d\n",m); pi=4*m/n; printf("pi=%f\n",pi);}蒙特卡罗方法求圆周率,刚做的。改变n的值可提高精度。程序上算了500万次,得到3.14142
回复

使用道具 举报

千问 | 2007-11-25 11:35:52 | 显示全部楼层
楼上的几位程序实在看不懂/小弟佩服
回复

使用道具 举报

千问 | 2007-11-25 11:35:52 | 显示全部楼层
百科上搜到的:#include <cstdlib>#include <iostream>#include <fstream>#define N 20010using namespace std;void mult (int *a,int b,int *s){
for (int i=N,c=0;i>=0;i--)
{
int y=(*(a+i))*b+c;
c=y/10;
*(s+i)=y%10;
}}void divi (int *a,int b,int *s){
for (int i=0,c=0;i<=N;i++)
{
int y=(*(a+i))+c*10;
c=y%b;
*(s+i)=y/b;
}}void incr(int *a,int *b,int *s){
for (int i=N,c=0;i>=0;i--)
{
int y=(*(a+i))+(*(b+i))+c;
c=y/10;
*(s+i)=y%10;
}}bool eqs(int *a,int *b){
int i=0;
while (((*(a+i))==(*(b+i)))&&(i<=N)) i++;
return i>N;}int main(int argc, char *argv[]){
int lpi[N+1],lls[N+1],lsl[N+1],lp[N+1];
int *pi=lpi,*ls=lls,*sl=lsl,*p=lp;
for (int i=0;i<=N;i++)*(pi+i)=*(ls+i)=*(sl+i)=*(p+i)=0;
memset(pi,0,sizeof(pi));
memset(ls,0,sizeof(ls));
memset(sl,0,sizeof(sl));
memset(p,0,sizeof(p));
*pi=*ls=*sl=1;
for (int i=1;true;i++)
{
mult(ls,i,sl);
divi(sl,2*i+1,ls);
incr(pi,ls,p);
if (eqs(pi,p)) break;
int *t;
t=p;
p=pi;
pi=t;
if (i%50==0) cout << i << "";
}
cout << endl;
mult(p,2,pi);
ofstream fout("pi.txt");
fout << *pi << ".";
for (int i=1;i<=N;i++)
{
fout << *(pi+i);
if (i%10==0) fout << " ";
if (i%80==0) fout << endl;
}
return EXIT_SUCCESS;}参考资料:百度百科

已赞过已踩过<
回复

使用道具 举报

千问 | 2007-11-25 11:35:52 | 显示全部楼层
查高数书 pi有一种利用阶乘计算的方法 用那种方法很容易通过编程实现
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行