麻烦用Java计算Pi

时间:2015-07-02 17:25:58

标签: java pi

我已经尝试了几天使用系列扩展pi = 4(1-1/3+1/5-1/7...来计算pi,但每当我使用下面的代码时,它都会返回4.0。

public class Pi {
    public static void main (String args[]) {
        double pie = 0.0;
        int max = 1000;
        for (int x = 1 ; x < max ; x = x + 2) {
            if (x % 4 == 1) {
                pie+= 1/x;
            } else if (x % 4 == 3) {
                pie-=1/x;
            }
        }
        System.out.println(4*pie);
    }
}

在此,我将pie计算为1000以下的分母。Pie是存储为pie创建的值的变量。最后,它打印pi,但总是返回4.0。

使用我的IDE(Eclipse)中的调试功能,我看到pie的值从初始值0跳到4,但在其余时间没有改变程序在for循环中递增x的值,它对pi没有任何作用。

3 个答案:

答案 0 :(得分:4)

您正在使用1/x执行整数除法,它始终会生成int,从而截断真正的十进制值。 1/11,但1除以Java中的0更大值,因此您的结果将始终为4

使用double字面值强制浮点除法。

pie += 1.0 / x;  // and pie -= 1.0 / x;

或者,您可以将1投射到double

pie += (double) 1 / x;  // and pie -= (double) 1 / x;

答案 1 :(得分:1)

问题是您正在执行整数除法并将结果添加到double。 xint1int。将整数除以整数时,将返回一个整数。因此,您添加到pie的内容始终是整数。

第一次运行循环时,计算表达式1/1,它只返回1(整数)并将该值赋给pie。对于之后的所有其他内容,您获得0,这意味着pie不会发生变化。因此,当您最终打印4 * pie时,您会获得4

有几个选择:

  • 到处使用double
  • pie += 1 / x;更改为pie += (1.0 / x);(另一个更改相同)
  • 1投放到double,然后再添加到piepie += (double) 1 / x

答案 2 :(得分:0)

问题是你正在进行一个小于零的整数除法。作为整数,该值将舍入为零。这会在每次迭代时为馅饼增加零。

你需要做的是将文字整数替换为文字浮点数,像这样

package cl.misc.pi;

public class Pi {
    public static void main(String args[]) {
        double pie = 0.0;
        int max = 1000;
        for (int x = 1; x < max; x = x + 2) {
            if (x % 4 == 1) {
                pie += 1.00 / x;
            } else if (x % 4 == 3) {
                pie -= 1.00 / x;
            }
        }
        System.out.println(4 * pie);
    }
}

如您所见,我确实将pie += 1 / x替换为pie += 1.00 / x,现在将一个浮点结果添加到饼中。

此例程的结果为3.139592655589785