Java浮点基元是否有IEEE 754标准实现?

GRO*_*X13 10 java floating-point double bigdecimal ieee-754

如果Java使用IEEE 754标准来实现其浮点运算,我很感兴趣.在这里,我在文档中看到了这种情况:

IEEE 754-2008中定义的操作

据我所知,IEEE 754的积极方面是提高浮点算术的精度,所以如果我将使用doublefloat在Java中,计算的预先计算与在BigDecimal?如果不是在Math课堂上使用IEEE 754标准的重点是什么?

T.J*_*der 14

我很感兴趣Java是否使用IEEE 754标准来实现它的浮点运算.

IEEE-754定义了多种浮点类型的标准.多年来,它们都是二元浮点数; 这就是Java的floatdouble是: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,decimal64decimal128.这些是十进制浮点数,因此它们的工作方式与我们相同.0.1可以准确地存储在一个decimal64.0.1 + 0.20.3decimal64.但是,就我所知,它们与你的问题并不真正相关.

自从BigDecimalIEEE-754 2008之前(稍微延伸)以来,它定义了自己的语义.

如果不是在数学课上使用IEEE 754标准的重点是什么?

JDK9 Math为IEEE-754 2008规范定义的内容添加了新的操作(例如fma,它进行了融合乘法 - 添加),因此为了清楚起见,它参照IEEE-754 2008规范定义了这些操作.

更多阅读: