当前位置: 首页 > 面试题库 >

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

年运珧
2023-03-14
问题内容

我编写了一个小程序来用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的目的,这很好。

感谢大家的帮助。


问题答案:

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

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



 类似资料:
  • 下面是一个程序,它应该计算小数点后的双倍值中的位数。在输入一些双值时,程序倾向于开始一个无限循环(可能是由于浮点不精确)。我不想使用任何包装器方法(包括String类)。有人可能为某些输入的无休止循环提供解释并提供解决方案吗?

  • 问题内容: 我正在使用下面的代码来获取我在两个分解位置创建的方法的答案。但是,当我这样做并顺从时,我得到一个错误,提示期望标识符。2错误出现,一个指向2,另一个指向之前。我怎么了 问题答案: 您所显示的内容是正确的,假设行不是全部在一起(语句必须在任何类的外部)。因此,例如,这是有效的: …但是问题中显示的那几行不是。 如果不是那样,您说过错误似乎集中在上。有时,当我们在SO上看到类似这样的问题时

  • 将双精度数字相乘,从输出中取小数点后两位 expectedRenewalAmount的输出是,那么我们如何用两个十进制数格式化上述输出 预期:

  • 我正在尝试在旁边使用值方法。 不幸的是,编译器说不兼容的类型。 如果我将s更改为s,它仍然不喜欢它。

  • 我对编程很陌生,在大学里我们学习了不同类型的数字(整数、短数、浮数、双数)。Float和double是浮点数。通常,它们由一个符号+/-、一个尾数和一个指数组成。每个部分占用一定数量的比特。一个浮动最多可以显示小数点后7位,最多可以双倍显示16位。其公式是: 23·log10(2)=23·(log(2)/log(10))≈23·0.3≈7(浮点数小数点后) 52·0.3≈16(双人小数点后) 我知

  • 我正在尝试编写一个Python 2.5.4代码来编写一个函数,该函数以浮点数x作为输入,并返回x中小数点后的位数。 这是我的代码: while循环中的print语句仅用于调试目的。 现在,当我运行这段代码时,我得到以下输出。 1 10 1.4159 1 2 100 14.159 14 3 1000 141.59 141 4 10000 1415.9 1415 5 100000 14159.0 14