gpt4 book ai didi

java - 如何在Java中使用大双数?

转载 作者:行者123 更新时间:2023-12-03 06:41:53 24 4
gpt4 key购买 nike

我找到了使用 BBS 算法计算 Pi 数量的解决方案。但我遇到了一个问题。如果使用双变量,我会丢失精度。有什么建议可以解决吗?

这是我的代码:

public class Pi {
public static void main(String[] args) {
int n = 5;

for (int k = 0; k < n; k++) {
int a0 = (int) Math.pow(16, k);

double a1 = (double) 4 / (8 * k + 1);
double a2 = (double) 2 / (8 * k + 4);
double a3 = (double) 1 / (8 * k + 5);
double a4 = (double) 1 / (8 * k + 6);

double a5 = a1 - a2 - a3 - a4;
double a6 = (double) 1 / a0;
double elem = a5 * a6;

System.out.println(new BigDecimal(elem));
}
}
}

最佳答案

如果你需要BigDecimal的精度,您需要将它用于所有计算。仅转换 double 的结果是不够的至BigDecimal最后,因为那时精度已经消失了。

您需要转换所有 aX变量为BigDecimal ,并将运算符替换为对 BigDecimal 的相应方法的调用类:

BigDecimal pi = BigDecimal.ZERO;
for (int k = 0; k < n; k++) {
BigDecimal a0 = new BigDecimal(16).pow(k);
BigDecimal a1 = new BigDecimal(4).divide(new BigDecimal(8*k+1), 20, RoundingMode.HALF_UP);
BigDecimal a2 = new BigDecimal(2).divide(new BigDecimal(8*k+4), 20, RoundingMode.HALF_UP);
BigDecimal a3 = new BigDecimal(1).divide(new BigDecimal(8*k+5), 20, RoundingMode.HALF_UP);
BigDecimal a4 = new BigDecimal(1).divide(new BigDecimal(8*k+6), 20, RoundingMode.HALF_UP);
BigDecimal a5 = a1.subtract(a2).subtract(a3).subtract(a4);
BigDecimal a6 = BigDecimal.ONE.divide(a0, 20, RoundingMode.HALF_UP);
pi.add(a5.multiply(a6));
System.out.println(pi);
}

Demo on ideone .

关于java - 如何在Java中使用大双数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20240275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com