📅  最后修改于: 2023-12-03 14:50:56.729000             🧑  作者: Mango
计算圆周率 π 是计算机科学领域中的一个经典问题。本文介绍如何在 Java 中计算π。
常见的计算π的算法有 Monte Carlo 方法、Chudnovsky 方法等。本文介绍的是 Leibniz π/4 公式。该公式可以写作:
$$ \frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \cdots $$
该公式等价于:
$$ \pi = 4 \cdot \sum_{i=0}^n \frac{(-1)^i}{2i + 1} $$
其中,当 $n \rightarrow \infty$ 时,上式的和逼近π。
在 Java 中,可以使用 BigDecimal 类来计算π,由于 BigDecimal 采用的是高精度计算,因此可以保证计算结果的准确性。
以下是 Java 代码实现,在控制台输出 π 的值:
import java.math.BigDecimal;
public class ComputePi {
public static void main(String[] args) {
int n = 100000; // 计算前 100000 项
BigDecimal sum = new BigDecimal(0);
for (int i = 0; i < n; i++) {
BigDecimal numerator = new BigDecimal(-1).pow(i);
BigDecimal denominator = new BigDecimal(2).multiply(new BigDecimal(i)).add(new BigDecimal(1));
BigDecimal term = numerator.divide(denominator, 10000, BigDecimal.ROUND_HALF_UP);
sum = sum.add(term);
}
BigDecimal pi = sum.multiply(new BigDecimal(4));
System.out.println(pi.toString());
}
}
以上代码中的核心部分为 for 循环,计算前 n 项的和:
BigDecimal sum = new BigDecimal(0);
for (int i = 0; i < n; i++) {
BigDecimal numerator = new BigDecimal(-1).pow(i);
BigDecimal denominator = new BigDecimal(2).multiply(new BigDecimal(i)).add(new BigDecimal(1));
BigDecimal term = numerator.divide(denominator, 10000, BigDecimal.ROUND_HALF_UP);
sum = sum.add(term);
}
其中,numerator
表示分子,denominator
表示分母,term
表示当前项的值。需要注意的是,numerator
和 denominator
均为 BigDecimal 类型,因此需要使用 BigDecimal 提供的运算符进行计算。
在代码中,numerator
的值为 $(-1)^i$,denominator
的值为 $2i+1$,term
的值为 $(-1)^i/(2i+1)$。
在计算 term
时,需要指定小数位数为 10000,这可以保证计算结果的精确性。
计算出前 n 项的和之后,需要乘以 4,即可得到π的值。
BigDecimal pi = sum.multiply(new BigDecimal(4));
System.out.println(pi.toString());
运行以上代码,控制台将输出π的值:
3.1415826535...
由于 BigDecimal 类采用的是高精度计算,因此计算结果的精度可以根据需求进行调整。