使用NaN

时间:2017-03-30 22:22:47

标签: java floating-point nan

Math.rint的javadoc说:“如果参数是NaN或无穷大或正零或负零,那么结果与参数相同。”但是,以下是错误的:

public static void main(String[] args) throws Throwable {
    double nan = Double.NaN;
    System.out.println(Double.doubleToRawLongBits(-nan) == Double.doubleToRawLongBits(Math.rint(-nan)));
}

我正在编写一个编译器,我需要保留NaN上的位。这是文档中还是运行时中的错误?或者“相同”对我来说和Java中的含义是否相同?

我假设在Double.isNaN调用之前我必须rint并实际保留相同的参数以保留编译器的语义。

编辑:这不是this问题的重复。我的问题是关于javadoc和/或JVM在其rint实现中是错误的,关于某个东西是否是跨平台的。请不要将问题标记为重复,因为两者都在JVM上交替使用NaN形式。

0 个答案:

没有答案