用Java计算小数点后16位以上的答案

问题描述

首先,双精度型的宽度与其可容纳的小数位数没有直接关系。双精度值是一个尾数和一个指数(除其他外),并且在内部当然是以2为底,因此它比“双精度值可以容纳X个小数位”复杂。

在任何情况下,您都应该能够BigDecimal对所有计算使用a ,只需使用BigDecimal而不是内置算术运算符的方法来执行所有数学运算即可。

解决方法

我编写了一个小程序来用Java计算Pi。

我的总结目前正在输入中double

我有两个输出,一个是Pi到16个小数位(原始输出)。第二个输出使用NumberFormat/ 舍入DecimalFormat到3-5个小数位。

我花了一段时间浏览和浏览Stackoverflow,但是作为一个初学者,我不确定keywords找到所需的正确方法所需要的任何内容,所以请原谅我。

是否可以计算出超过16个小数位的答案(即Pi)?说32岁?如果是这样,我该如何处理?

我已经看过了BigDecimal,但是我不认为这是我想要的,因为我看到的所有示例都首先使用大量小数位预先定义了数字,而不是通过计算,但是我可能错了。

我知道double的是64位类型,因此不会超过16位小数。我也知道使用long类型会失去精度…

任何建议或指导将不胜感激。

谢谢。

更新资料

不幸的是,使用BigDecimals,我仍然不能获得超过16个小数位……我朝着正确的方向前进吗?

再次更新

我刚刚意识到我认为我的问题出 scale
在我的部门。我将其更改为100,现在我将Pi设置为小数点后100位…我认为该scale参数允许更高的精度等。它需要该divide(BigDecimal divisor,int scale,int roundingMode)方法。在此处查看Java
Doc >>

利用Madhava–Leibniz系列中的500,000个项,我现在可以使用6个“正确的”有效数字来计算Pi到10,000个小数位。其余的仍在收敛(很显然,需要更多1000项才能更精确地表示Pi)。但是出于我们大多数人需要Pi的目的,这很好。

感谢大家的帮助。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”