Leibniz公式计算π - Java

66 浏览
0 Comments

Leibniz公式计算π - Java

勒布尼茨的π公式是π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9... 我不知道如何在Java中使用这个公式。我只需要一些关于如何结合第二部分的帮助。我知道我需要一个循环和一个除数变量,并且每次需要加2。谢谢任何帮助。

0
0 Comments

Leibniz formula for pi - Java

在上述内容中,我们看到了一个用于计算圆周率的Leibniz公式的Java代码。我们将从中提取出问题的出现原因和解决方法。

问题的出现原因是代码中的循环部分可能存在一些不准确的地方。具体来说,循环中的if条件语句可能会导致代码运行速度变慢。

解决该问题的方法是通过对代码进行优化来提高运行速度。具体来说,我们可以通过简化和修改if条件语句来达到这个目的。

代码中的循环部分应该类似于以下形式:

double sum=0;
double sign=1.0;
for(int i =1;i<=limit;i+=2)
{
    sum+=sign/i;
    sign*=-1;
}

或者

sign*=-1; 
sum+=sign/i;

可以看到,我们可以通过将`sign = sign*-1;`替换为`sign*=-1;`来简化代码。这样做后,我们就可以去掉if条件语句,从而使代码运行速度更快。

通过进行以上修改,我们成功解决了代码中存在的问题,并使代码更加简洁和高效。

0
0 Comments

原因:在计算圆周率的Leibniz公式时,使用了for循环递增的方式进行计算。这种方式在累积较小的数值时会存在舍入误差,导致计算结果的精度有所损失。

解决方法:通过将for循环的递增方式改为递减方式,可以提高计算结果的精度。在递减方式下,较大的数值会在最后被累加,从而掩盖了较小数值的舍入误差。

以下是使用递减方式进行计算的优化版本代码:

long start = System.nanoTime();
double pi = 0;
for (int i = 999999999; i >= 1; i -= 4) {
    pi += 8.0 / (i * (i + 2L));
}
long time = System.nanoTime() - start;
System.out.println(pi + " took " + time / 1000000 / 1e3 + " secs.");

使用递减方式进行计算的结果为:

3.141592651589793 took 1.222 secs.

通过使用递减方式进行计算,可以获得更准确的结果。预期的圆周率值为3.14159265359。

在下面的链接中,可以找到关于使用pi方法的一个很好的解决方案。

[stackoverflow.com/a/70053809/9345726](https://stackoverflow.com/a/70053809/9345726)

0