是否有针对Java浮点原语的IEEE 754标准实现?
我感兴趣的是Java是否使用IEEE 754标准来实现其浮点算法。我在文档中看到了这种情况: IEEE 754-2008中定义的操作 据我所知,IEEE754的积极方面是提高浮点算术的精度,所以如果我在Java中使用是否有针对Java浮点原语的IEEE 754标准实现?,java,floating-point,double,bigdecimal,ieee-754,Java,Floating Point,Double,Bigdecimal,Ieee 754,我感兴趣的是Java是否使用IEEE 754标准来实现其浮点算法。我在文档中看到了这种情况: IEEE 754-2008中定义的操作 据我所知,IEEE754的积极方面是提高浮点算术的精度,所以如果我在Java中使用double或float,计算的预测将与BigDecimal中的预测相同吗?如果不是,那么在课堂上使用IEEE754标准有什么意义呢 我感兴趣的是Java是否使用IEEE 754标准来实现其浮点运算 IEEE-754定义了多种浮点类型的标准。多年来,它们都是二进制浮点;这就是Java
double
或float
,计算的预测将与BigDecimal
中的预测相同吗?如果不是,那么在课堂上使用IEEE754标准有什么意义呢
我感兴趣的是Java是否使用IEEE 754标准来实现其浮点运算
IEEE-754定义了多种浮点类型的标准。多年来,它们都是二进制浮点;这就是Java的float
和double
的含义:float
是32位IEEE-754二进制浮点值(标准称之为)double
是64位的(标准称之为)。这些二进制浮点数对于计算机的计算非常有效,但是因为它们是二进制的,而我们是十进制的,所以存在一些期望不匹配;例如,0.1
不能精确地存储在double
中,而像0.1+0.2
这样的异常结果是0.300000000000000004
。有关详细信息,请参阅。例如,它们不是财务计算的好选择
BigDecimal
是一个Java类,它以任意精度实现十进制小数。它比使用double
慢得多,但结果符合我们的十进制期望(例如,0.1+0.2
将是0.3
)
2008年版IEEE-754增加了重要的新格式,尤其是。它们是十进制浮点,因此它们的工作方式与我们的工作方式相同0.1
可以准确地存储在小数64
中0.1+0.2
是0.3
中的小数64
。然而,据我所知,它们与你的问题并不相关
由于BigDecimal
早于IEEE-754 2008(在一定程度上),它定义了自己的语义
如果不是,在数学课上使用IEEE754标准有什么意义
JDK9向Math
中添加了新的操作,这些操作执行IEEE-754 2008规范定义的操作(例如,它执行a),因此为了清晰起见,它参考IEEE-754 2008规范定义了这些操作
更多阅读: