5
我正在尝试使Android手机计算Pi的n个小数。为此,我正在使用此代码:在Android手机上计算Pi
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的东西。为什么这个错过计算发生,我该如何做这项工作?
发现当我与JDK 1.7.0_1(win32的甲骨文VM)执行该代码调用PI(100),我还得到0.8 ... ...作为结果。 – Robert
ONE从哪里来?我是一个Java新手,但这看起来不像工作代码,因为我必须进行更改才能构建它。一旦我补充说,我也得到了0.8 ... – Brad
我只是在台式机上运行它,得到了.8472 ...我在一台Ubuntu 64位机器上,如果这是相关的,那么Java 1.6。你在跑什么,你实际上得到了Pi的近似值?另外,我通过做Pi myPi = new Pi()来测试; myPi.pi(10);打印(myPi.returnNum); - 这是正确的? –