您的位置:

c语言montecarlo,李洵爱心代码编程C语言

本文目录一览:

用C语言写,用蒙特卡洛和矩形法求y=sinx+cosx(0

#includestdio.h

#includestdlib.h

#includemath.h

#includetime.h

double f(double x){

return sin(x)+cos(x);

};

double RECT(int count){

double area = 0.0;

int i = 0;

double x = 0.0;

double width = 1.0/count;

for(i=0;icount;i++){

area+= f(x+i*width)*width;

}

return area;

};

double MonteCarlo(int count){

int M = 0;

int i = 0;

srand((int)(time(NULL)));

for(i = 0; i count; i ++){

double x = 1.0*rand()/(RAND_MAX+1.0);

double y = 2.0*rand()/(RAND_MAX+1.0);

if(y=f(x)){

M++;

}

}

return 2.0*M/count;

};

int main(){

printf("%lf\n",MonteCarlo(10000));

printf("%lf\n",RECT(10000));

return 0;

}

有关c语言

#include"stdio.h"

#include"stdlib.h"

#includemath.h

#includetime.h

bool toss()

{

double x =0.0, y=0.0;

double sign=((double)rand()/RAND_MAX);

double size=((double)rand()/RAND_MAX);

if (sign0.5)

x=size;

else

x=-size;

sign=((double)rand()/RAND_MAX);

size=((double)rand()/RAND_MAX);

if (sign0.5)

y=size;

else

y=-size;

double z=sqrt(x*x+y*y);

if (z1)

return false;

else

return true;

}

double ratio (int num)

{

int i,sum=0;

srand((unsigned)time(0));

for(i=0;inum;i++)

{

if (toss()==1)

sum++;

}

return (double) sum / (double) num;

}

double MonteCarloPi(int num)

{

return ratio(num)*4;

}

int main()

{

double pi =MonteCarloPi(10000);

printf("PI=%f\n",pi);

return 0;

}

C语言一次同时扔2个骰子,共扔24次计算至少有一次是2个骰子都为6的概率

改成浮点数的除法即可

double probabilityByMath()

{double p,p1,p2;

p1=1-(1.0/6)*(1.0/6);

p2=pow(p1,24);

p=1-p2;

return p;

}

为什么答案还是输出1.0000?C语言

当第一次 满足 if(a==6b==6) 条件 后, 执行了一次 x=x+1; 于是今后 x 必定 大于 0

接着,因为 i 每循环一次 if(x0) 的条件 100% 的机会成立, 于是必做 m6=m6+1;。

这样 m6 几乎 等于 i.

循环n次以后, m6 几乎等于 n ,所以 概率 接近 1。