# include & ltstdio.h & gt
# include & ltmath.h & gt
# include & lttime.h & gt//使用當前時鐘作為種子
雙倍?飛鏢(int?n,雙?a,雙份?b);
雙倍?f(雙?x);//積分函數?
main(){?
int?I,n[5]={100,1000,1000,10000,1000000 };//隨機點數,數量越多,結果越準確?
雙倍?a=1.0,b = 2.0//積分的上下界?
srand((無符號)時間(空));?//初始化壹個隨機數
for(I = 0;我& lt5;i++)
printf("%d:\tn=%d\tr=%lf\n ",i+1,n[i],Darts(n[i],a,b));
}
/*?基本思想是在壹個矩形區域內隨機均勻投點,找出這些點的分布。
*?將生成函數值的算術平均值乘以區間寬度,即可得到。
*?求定積分的近似解?
*/
雙倍?飛鏢(int?n,雙?a,雙份?b)
{
int?我;
雙倍?sum?=?0.0;?
for(I = 0;?我& ltn;?i++){
雙倍?x?=?(b-a)*蘭特()?+?a;//生成壹個[a,b]之間的隨機數
sum?=?sum?+?f(x);
}
回歸?(b-a)*總和/n;
}
雙倍?f(雙?x){
回歸?sin(x)/x;
}