Java - 计算π

14 浏览
0 Comments

Java - 计算π

我一直想用格雷戈里-莱布尼兹级数来计算π,但是有些问题。我对Java还不太熟悉,所以这可能不是一个难题。我不知道出了什么问题,有人可以帮我吗?

目前的代码:

package com.waitdev.pi;
public class Pi {
    static int pi = 0;
    public static void main(String[] args) {
        for (int i = 1; i < 51; i++) {
            if (isOdd(i)) {
                pi = pi+(4/((i*2)-1));
                // System.out.println(i);
            } else {
                pi = pi-(4/(i*2)-1);
                // System.out.println(i);
            }
        }
        System.out.println(pi);
    }
    private static boolean isOdd(int n) {
        if (n % 2 == 1) {
            return true;
        } else {
            return false;
        }
    }
}

FYI:输出结果为28。

谢谢。

0
0 Comments

问题的原因是代码中缺少了一个括号,并且需要强制使用浮点数计算。解决方法是添加缺少的括号,并使用浮点数或双精度浮点数来存储pi的值。此外,还提供了一个简化的isOdd方法,并建议使用4.0代替4来确保使用非整数进行计算。由于使用Gregory-Leibniz级数可能需要数百万次迭代,因此可以通过使用`(i & 0x01) > 0`来更快地确定奇偶性。

0
0 Comments

原因:代码中存在几个问题,导致计算π的结果不准确。首先,代码中使用的int类型会将结果四舍五入为整数,需要将其改为double类型。其次,在else语句中缺少括号,导致计算公式错误。最后,为了确保结果准确,将if和else语句中的整数改为double类型。

解决方法:将int类型改为double类型,同时在else语句中添加括号,并将if和else语句中的整数改为double类型。

以下是修改后的代码:

static double pi = 0;
if (isOdd(i)) {
    pi = pi + (4.0 / ((i * 2.0) - 1.0));
} else {
    pi = pi - (4.0 / ((i * 2.0) - 1.0));
}

修改后的代码可以正确计算π的值。

0