您的位置:

蒙特卡罗c语言,蒙特卡洛c语言

本文目录一览:

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上有点问题~~~~