首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有任何IEEE 754标准实现的Java浮点原语吗?

有任何IEEE 754标准实现的Java浮点原语吗?
EN

Stack Overflow用户
提问于 2016-10-28 07:21:18
回答 1查看 10.9K关注 0票数 13

我感兴趣的是Java是否使用IEEE 754标准来实现它的浮点算法。这里 --我在文档中看到了这样的事情:

IEEE 754-2008中定义的操作

据我所知,IEEE754的积极一面是提高浮点算法的精度,所以如果我在Java中使用doublefloat,计算的可能性是否与BigDecimal相同?如果不是,那么在Math类中使用IEEE754标准有什么意义呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 07:25:57

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

IEEE-754定义了多种浮点类型的标准。多年来,它们都是二进制浮点;这就是Java的floatdouble的特点:float是32位IEEE-754二进制浮点值(标准称为binary32)。double是64位的(标准称为binary64)。对于计算机来说,这些二进制浮点数非常有效,但是因为它们是二进制的,而我们是十进制的,所以有一些期望不匹配的地方;例如,0.1不能精确地存储在double中,你会发现像0.1 + 0.2这样的奇怪的东西变成了0.30000000000000004。详情请参见https://stackoverflow.com/questions/588004/is-floating-point-math-broken。例如,对于财务计算来说,它们不是一个好选择。

BigDecimal是一个Java类,它实现具有任意精度的小数小数。它比使用double慢得多,但结果符合我们十进制的预期(例如,0.1 + 0.2将是0.3)。

IEEE-754的2008年版增加了重要的新格式,特别是decimal32decimal64decimal128。这些是十进制浮点数,所以它们的工作方式和我们一样。0.1可以准确地存储在decimal64中。0.1 + 0.20.3 in decimal64。然而,据我所知,它们与你的问题并没有真正的关系。

由于BigDecimal早于IEEE-754 2008 (在某种程度上),它定义了自己的语义。

如果不是,在数学类中使用IEEE 754标准有什么意义?

JDK9为Math添加了新的操作,这些操作可以执行IEEE-754 2008规范定义的事情(比如fma,它可以执行融合相加),因此为了清晰起见,它参照IEEE-754 2008规范定义了这些操作。

更多阅读:

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40300041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档