gpt4 book ai didi

c - 使用 C 寻找 pi 的蒙特卡洛方法

转载 作者:太空狗 更新时间:2023-10-29 14:50:53 25 4
gpt4 key购买 nike

我编写了一个函数,它接受一个 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 rand() 函数 returns an integer在 0 到 RAND_MAX 范围内。那里的关键字是整数

然后计算该整数模 2 的结果,它可以是 0 或 1。这给您留下 4 个可能的点:(0,0), (0,1), (1,0), (1, 1).

在这 4 个点中,只有 1 个位于半径 1 的圆之外:(1,1)。也就是说,在 4 个可能的点中,有 3 个位于圆圈内。

您应该将该代码替换为使用浮点值,而不是整数,这样您就可以计算圆内点和圆外点的比例。

关于c - 使用 C 寻找 pi 的蒙特卡洛方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55148800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com