GRO*_*X13 10 java floating-point double bigdecimal ieee-754
如果Java使用IEEE 754标准来实现其浮点运算,我很感兴趣.在这里,我在文档中看到了这种情况:
IEEE 754-2008中定义的操作
据我所知,IEEE 754的积极方面是提高浮点算术的精度,所以如果我将使用double
或float
在Java中,计算的预先计算与在BigDecimal
?如果不是在Math
课堂上使用IEEE 754标准的重点是什么?
T.J*_*der 14
我很感兴趣Java是否使用IEEE 754标准来实现它的浮点运算.
IEEE-754定义了多种浮点类型的标准.多年来,它们都是二元浮点数; 这就是Java的float
和double
是:float
是一个32位IEEE-754二进制浮点值(什么标准要求binary32
).double
是一个64位(标准调用binary64
).这些二进制浮点数对于计算机来说非常有效,但由于它们以二进制方式工作而且我们以十进制方式工作,因此存在一些期望不匹配; 例如,0.1
不能精确地存储在一个double
,你会得到怪异喜欢0.1 + 0.2
谈到了将0.30000000000000004
.请参阅浮点数学是否已损坏?详情.例如,它们不是财务计算的好选择.
BigDecimal
是一个Java类,它以任意精度实现小数小数.它比使用慢得多double
,但结果符合我们的十进制预期(例如,那0.1 + 0.2
将是0.3
).
IEEE-754的2008年版增加了显著新的格式,特别是decimal32
,decimal64
和decimal128
.这些是十进制浮点数,因此它们的工作方式与我们相同.0.1
可以准确地存储在一个decimal64
.0.1 + 0.2
是0.3
在decimal64
.但是,就我所知,它们与你的问题并不真正相关.
自从BigDecimal
IEEE-754 2008之前(稍微延伸)以来,它定义了自己的语义.
如果不是在数学课上使用IEEE 754标准的重点是什么?
JDK9 Math
为IEEE-754 2008规范定义的内容添加了新的操作(例如fma
,它进行了融合乘法 - 添加),因此为了清楚起见,它参照IEEE-754 2008规范定义了这些操作.
更多阅读: