#include<stdio.h>
#include<math.h>
#include<time.h>//使用當前時鐘做種子
double?Darts(int?n,double?a,double?b);
double?f(double?x);//積分函數?
main(){?
int?i,n[5]={100,1000,1000,10000,10000000};//隨機投點個數,個數越多結果越精確?
double?a=1.0,b=2.0;//積分上下界?
srand((unsigned)time(NULL));?//初始化隨機數
for(i=0;i<5;i++)
printf("%d:\tn=%d\tr=%lf\n",i+1,n[i],Darts(n[i],a,b));
}
/*?基本思想是在矩形區域內隨機均勻投點,求出由這些點
*?產生的函數值的算術平均值,再乘以區間寬度,即可得 *?出定積分的近似解? */double?Darts(int?n,double?a,double?b)?
{
int?i;
double?sum?=?0.0;?
for(i=0;?i<n;?i++){
double?x?=?(b-a)*rand()?+?a;//產生[a,b)之間的隨機數
sum?=?sum?+?f(x);
}
return?(b-a)*sum/n;
}
double?f(double?x){
return?sin(x)/x;
}