我最近在 Java 虚拟机规范中读到,JVM 不支持 NaN 值,也不支持发出溢出信号的方法。
我特别指的是 jvms 7 的第 2.8.1 节,JVM 和 IEEE 754 支持的浮点运算之间的主要区别,要点指出:
"The floating-point operations of the Java Virtual Machine do not throw
exceptions, trap, or otherwise signal the IEEE 754 exceptional conditions of
invalid operation, division by zero, overflow, underflow, or inexact. The Java
Virtual Machine has no signaling NaN value."
我是否误解了这一点?在 Scala(依赖字节码中的 Java 基元来表示数字类型)和 Java 的 Double 对象中,有一个 NaN 和一个正/负无穷大值(在 Java 中有相应的二进制值的文档)。如果 JVM 不支持它们,如何有效地处理它们?
最佳答案
你引用的文字说没有信号 NaN,而不是没有 NaN。
重要的是 Java 中的浮点运算会产生预期值(包括 NaN 和无穷大)但不会抛出异常。
关于java - JVM 缺乏对 NaN 与 scala Double.NaN 的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15412766/