本文目录一览:
C语言 用蒙特卡洛法求圆周率 帮忙修改一下程序
#includestdlib.h
#includetime.h
#includestdio.h
#define N 30000
int main() //标准C++写法
{
double x,y; //不提倡用float,因为你已经显式转换成了double,会丢失数据.
int c=0,d=0;
srand((time_t)time(0)); //强制类型转换
while(c++=N)
{x=rand()/(double)RAND_MAX;
y=rand()/(double)RAND_MAX;
if(x*x+y*y=1)
d++;
}
printf("pi=%lf\n",4.000000*d/N);
return 0; //返回值
}
c语言用蒙特卡洛方法求定积分 大佬帮忙看看哪里不对
#includestdio.h
#include time.h
#include stdlib.h
double jifen(int, int, int, int);
int main()
{
int a,b,d,n;
double c;
srand((unsigned)time(NULL));
printf("请输入a b\n");
scanf("%d %d",a,b);
printf("请输入n\n");
scanf("%d",n);
d=1+b*b;
c=jifen(a,b,d,n);
printf("积分为%lf\n",c);
return 0;
}
double jifen(int a,int b,int d,int n)
{
int i,m=0;
double x,y,result;
for(i=1;i=n;i++){
x=(double)rand()/(double)(RAND_MAX)*(b-a)+a;
y=(double)rand()/(double)(RAND_MAX)*d;
if(y=1+x*x) m++;
}
result=(double)m*(b-a)*d/n;
return result;
};
如上 使用double 在最后加入result的强制转换
另外在x定义那里,改为(rand/rand_max)*(b-a)+a
因为是a,b 之间的距离随机加a,当a不为0时原来的式子是错的。
c语言,蒙特卡洛方法求pi。
dty@ubuntu:~$ cat pi.c
#includestdio.h
#includestdlib.h
#includetime.h
int main()
{
unsigned long i;
unsigned long m;
const unsigned long N=100000000;
double x,y,pi;
srand((unsigned)time(NULL));
for(i=0,m=0;iN;i++)
{
/*x,y在区间(-1,1)*/
x=2.0*rand()/RAND_MAX-1;
y=2.0*rand()/RAND_MAX-1;
if((x*x+y*y)=1)
{
m++;
}
}
pi=4.0*m/N;
printf("%lf\n",pi);
return 0;
}
dty@ubuntu:~$ gcc pi.c
dty@ubuntu:~$ ./a.out
3.141575
c语言中用蒙特卡洛法求积分输出info00
#include "stdio.h"
#include "time.h"
#include "math.h"
#include "dos.h"
#define PI 3.1415926
main()
{ double x,y,sum=0;
int i;
for(i=0;i=100;i++)
{ srand(time(0));
x=rand()%10000;
x=x/10000*PI/2;
sleep(1);
srand(time(0));
y=rand()%10000;
y=y/10000;
if(y=sin(x)) sum++;
clrscr();
printf("%d%",i);
}
clrscr();
printf("%f ",sum/--i);
}
TC上没问题 VC上有点问题~~~~