【发布时间】:2019-08-04 12:54:48
【问题描述】:
我编写了一个函数,它接收一个 long long 值 n 并将其用作要通过的迭代次数。该函数应该可以很好地估计 pi,但是,大 n 的所有值都趋向于 3.000,而不是 3.1415,所以我不确定发生了什么?
是不是我做错了什么?
这是我的代码:
double estimate_pi(long long n){
double randomx, randomy, equation, pi;
long long i, incircle = 0;
for(i = 0; i < n; i++){
randomx = (double)(rand() % (1+1-0) + 0);
randomy = (double)(rand() % (1+1-0) + 0);
equation = randomx * randomx + randomy * randomy;
if(equation <= 1){
incircle++;
}
}
pi = (long double)4 * (long double)incircle / (long double)n;
return pi;
}
在main函数中,打印10个pi值:
int main(void){
long long N;
double pi_approx;
int i;
printf("Input a value of N: ");
if(scanf("%ld", &N) != 1){
printf("Error, input must be an integer!\n");
exit(EXIT_SUCCESS);
}
if(N < 1){
printf("Error, the integer must be positive!\n");
exit(EXIT_SUCCESS);
}
srand(time(NULL));
for(i = 0; i < 10; i++){
pi_approx = estimate_pi(N);
printf("%.10f\n", pi_approx);
}
return 0;
}
【问题讨论】:
标签: c montecarlo pi