【发布时间】:2015-10-29 15:56:42
【问题描述】:
我想模拟 x86 扩展精度类型并执行算术运算并转换为 Java 中的其他类型。
我可以尝试使用 BigDecimal 来实现它,但涵盖围绕 NaN、无穷大和强制转换的所有特殊情况可能是一项乏味的任务。我知道一些库提供了比双精度更高的其他浮点类型,但我希望具有与 x86 80 位浮点相同的精度。
是否有提供这种浮点类型的 Java 库?如果没有,您能否提供其他提示,以比提出自定义 BigDecimal 解决方案更轻松地实现这种数据类型?
【问题讨论】:
-
这听起来是个有趣的问题,但为什么要模拟 80 位扩展精度格式呢?为什么不模仿更精确的东西?
-
在这种情况下,与标准 IEEE 754 相比,模拟对次正规数的古怪处理会很有趣:en.wikipedia.org/wiki/…
-
BigDecimal不适合这个问题;BigDecimal表示 十进制 的 10 次方数;您想要的类型表示 二进制 2 的幂数,混合它们并不是一个好计划。 -
“不是一个好计划”是轻描淡写的。 “注定要失败”更像是这样:)
-
@NayukiMinase:80 位浮点不像其他类型那样具有次正规,因为它使用显式而不是隐式前导 1。当存储指数低于最小允许值的结果时,需要进行一些特殊处理,但与其他需要对加载和存储进行特殊处理的格式相比,它的麻烦要少。
标签: java floating-point precision x86-emulation