在Android手机上计算Pi

时间:2011-12-01 15:37:22

标签: java android pi

我正在尝试制作Android手机,计算Pi的n位小数。为此,我使用此代码:

public class Pi {

private static final BigDecimal TWO = new BigDecimal(2);
private static final BigDecimal FOUR = new BigDecimal(4);
private String nummer; 

public void pi(final int SCALE) {
    BigDecimal a = ONE;
    BigDecimal b = ONE.divide(sqrt(TWO, SCALE), SCALE, ROUND_HALF_UP);
    BigDecimal t = new BigDecimal(0.25);
    BigDecimal x = ONE;
    BigDecimal y;

    while (!a.equals(b)) {
        y = a;
        a = a.add(b).divide(TWO, SCALE, ROUND_HALF_UP);
        b = sqrt(b.multiply(y), SCALE);
        t = t.subtract(x.multiply(y.subtract(a).multiply(y.subtract(a))));
        x = x.multiply(TWO);
    }

    a.add(b).multiply(a.add(b)).divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP);
    number(a);
}

public void number(BigDecimal a) {
    //nummer = a.toString().length();
    nummer = a.toString();
}

public String returnNum() {
    return nummer;
}

public static BigDecimal sqrt(BigDecimal A, final int SCALE) {
    BigDecimal x0 = new BigDecimal("0");
    BigDecimal x1 = new BigDecimal(Math.sqrt(A.doubleValue()));

    while (!x0.equals(x1)) {
        x0 = x1;
        x1 = A.divide(x0, SCALE, ROUND_HALF_UP);
        x1 = x1.add(x0);
        x1 = x1.divide(TWO, SCALE, ROUND_HALF_UP);
    }

    return x1;
}

这就像任何计算机上的魅力一样,但当我尝试在我的Android平板电脑上运行它时,它决定Pi是0.8。为什么会发生这种错过计算?如何才能使其工作?

1 个答案:

答案 0 :(得分:1)

您的计算中缺少一点。这一行:

a.add(b).multiply(a.add(b)).divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP);

未分配给任何内容。将其分配给某个东西并打印出该值,您将发现您的计算有效。

BigDecimal pi = a.add(b).multiply(a.add(b)).divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP);
System.out.println(pi)

这给了我正确的答案。

对于那些感兴趣的人,可以在wikipedia

上找到该算法