【发布时间】:2024-01-02 01:23:02
【问题描述】:
我写了一个用 Java 计算 Pi 的小程序。
我的总结目前输入double。
我有两个输出,一个是小数点后 16 位的 Pi(原始输出)。
第二个输出使用NumberFormat/DecimalFormat四舍五入到小数点后3-5位。
我花了一些时间在 Google 上搜索和浏览 *,但作为初学者,我不确定找到我正在寻找的正确方法可能需要的任何 keywords,所以请原谅我的天真...
是否可以计算出超过 16 位小数的答案(即 Pi)?说,32? 如果是这样,我该如何处理?
我查看了BigDecimal,但我认为这不是我所追求的,因为我看到的所有示例都预先定义了具有大量小数位的数字,而不是通过计算,但我可能错了。
我了解double 是 64 位类型,因此不会超过 16 位小数。
我也明白使用long 作为类型会失去精度......
我们将不胜感激任何建议或指导。
谢谢。
更新
不幸的是,我仍然没有使用 BigDecimals 得到超过 16 位小数... 我的方向正确吗?
再次更新
我刚刚意识到我认为我的问题出在我部门期间的 scale 上。我将它更改为 100,现在我将 Pi 设置为 100 个小数位......我认为 scale 参数允许更高的精度等。它需要 divide(BigDecimal divisor, int scale, int roundingMode) 方法。参见 Java 文档>> here <<
有了 Madhava–Leibniz 级数的 500,000 个项,我现在可以用 6 个“正确”有效数字计算 Pi 到 10,000 个小数位。其余的仍在收敛(显然需要 1000 多个术语才能更准确地表示 Pi)。但就我们大多数人需要 Pi 的目的而言,这很好。
感谢大家的帮助。
【问题讨论】:
-
BigDecimal可以很好地进行计算。 -
您正在寻找一个支持“任意精度算术”的库。
BigDecimal执行此操作并包含在 Java 中。 -
我已经更新了我的问题并添加了代码...不幸的是,我遇到了异常,我不明白为什么...谢谢。