计算圆周率
每次随机产生两个[0,1]之间均匀分布的实数,判断该点是否在单位圆内。多次重复计算,看看产生的点落在单位圆内的概率。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int num;
printf("请输入模拟次数:");
scanf("%d",&num);
double x,y,distance;
int circleNums=0;
// https://blog.csdn.net/weixin_57709996/article/details/123440399
srand((unsigned)time(NULL));
int i;
for(i=0;i<num;i++){
// https://www.zhihu.com/question/281043962
x = rand()/((double)(RAND_MAX));
y = rand()/((double)(RAND_MAX));
distance= (x-1)*(x-1)+(y-1)*(y-1);
if(distance<=1){
circleNums++;
}
// printf("x=%f,y=%f,distance=%f,circleNums=%d\n",x,y,distance,circleNums);
}
// https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651865268&idx=1&sn=a41ef46c1eb8bf34b250662182e754e1&chksm=804905fdb73e8ceb8d7bc1b88626f68151adbcb2cd0baeca00e831c0438727ad811578c5edf2&scene=27
double result = circleNums*4.0/num;
printf("%f\n",result);
return 0;
}