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形式。