其他NaN值是什么? [英] What are the other NaN values?

查看:226
本文介绍了其他NaN值是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

文件c> java.lang.Double.NaN 表示它是


类型为 double 的非数字(NaN)值。它等于由 Double.longBitsToDouble(0x7ff8000000000000L)返回的值。

这似乎意味着还有其他的。如果是的话,我怎样才能得到他们,这可以做到portably?

要清楚,我想找到双 values x 这样

  Double。 doubleToRawLongBits(x)!= Double.doubleToRawLongBits(Double.NaN)

  Double.isNaN(x)



解决方案

您需要 doubleToRawLongBits 而不是 doubleToLongBits


$ b doubleToRawLongBits 提取实际的二进制表示。 doubleToLongBits 不会将所有的 NaN s转换为默认的 NaN

  double n = Double.longBitsToDouble(0x7ff8000000000000L); //默认NaN 
double n2 = Double.longBitsToDouble(0x7ff8000000000100L); //也是NaN,但是M!= 0

System.out.printf(%X \ n,Double.doubleToLongBits(n));
System.out.printf(%X \ n,Double.doubleToRawLongBits(n));
System.out.printf(%X \ n,Double.doubleToLongBits(n2));
System.out.printf(%X \ n,Double.doubleToRawLongBits(n2));

输出:

  7FF8000000000000 
7FF8000000000000
7FF8000000000000
7FF8000000000100


The documentation for java.lang.Double.NaN says that it is

A constant holding a Not-a-Number (NaN) value of type double. It is equivalent to the value returned by Double.longBitsToDouble(0x7ff8000000000000L).

This seems to imply there are others. If so, how do I get hold of them, and can this be done portably?

To be clear, I would like to find the double values x such that

Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(Double.NaN)

and

Double.isNaN(x)

are both true.

解决方案

You need doubleToRawLongBits rather than doubleToLongBits.

doubleToRawLongBits extracts the actual binary representation. doubleToLongBits doesn't, it converts all NaNs to the default NaN first.

double n = Double.longBitsToDouble(0x7ff8000000000000L); // default NaN
double n2 = Double.longBitsToDouble(0x7ff8000000000100L); // also a NaN, but M != 0

System.out.printf("%X\n", Double.doubleToLongBits(n));
System.out.printf("%X\n", Double.doubleToRawLongBits(n));
System.out.printf("%X\n", Double.doubleToLongBits(n2));
System.out.printf("%X\n", Double.doubleToRawLongBits(n2));

output:

7FF8000000000000
7FF8000000000000
7FF8000000000000
7FF8000000000100

这篇关于其他NaN值是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆