本文目录一览:
- 1、用C语言写,用蒙特卡洛和矩形法求y=sinx+cosx(0
- 2、有关c语言
- 3、C语言一次同时扔2个骰子,共扔24次计算至少有一次是2个骰子都为6的概率
- 4、为什么答案还是输出1.0000?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。