gpt4 book ai didi

c++ - 尝试计算 pi 时不断得到 0

转载 作者:行者123 更新时间:2023-12-01 14:48:26 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is the behavior of integer division?

(6 个回答)


去年关闭。




我被要求编写一个程序,从用户那里获取 N 个点,并使用连续分布使用蒙特卡罗技术找到 Pi 的近似值。这是我写的:

        unsigned seed = chrono::steady_clock::now().time_since_epoch().count();
default_random_engine e (seed);
uniform_real_distribution<> dist(0,2);
int N = atoi(argv[1]);
int inside = 0;
long double appPi = 0;
for (int i = 0; i<N; i++){
double x = dist(e);
double y = dist(e);
double distance = sqrt(x*x+y*y);
if (distance <= 1){ inside++;}
}
appPi = (inside/N)*4;

然而,在打印 appPi 后,我得到的只是 0。我认为该算法本身还可以吗?因为它打印了 x 和 y 的合理值,但它对我来说并不真正有效。

最佳答案

除了 Xatyrian 指出的整数除法之外,您还缺少乘法因子。您正在提取大小为 l = 2 的正方形中的随机点,然后计算半径 R = 1 的四分之一圆中有多少个点。如果我们定义这些点 f 的分数,我们可以将此值连接到正方形和四分之一圆的面积:pi R^2/4 = fl^2。

如果我们插入上面定义的值的这种关系,我们会发现 pi = 16 f 而不是 4 f,正如您的代码所暗示的那样。事实上,0.7872 * 4 = 3.1488。

与使用 16 而不是 4 相比,一个快速且更合理的解决方法是通过进行以下更改来提取大小为 l 的正方形中的点:

uniform_real_distribution<> dist(0,1);

关于c++ - 尝试计算 pi 时不断得到 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60811394/

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