排序的Java Double NaN比较

时间:2016-02-23 06:46:40

标签: java double nan comparator

我正在为课程实施比较器,而在覆盖比较时,我有一个问题。

double data1 = GetValueOf(Data1);
double data2 = GetValueOf(Data2);
int compareResult = Double.compare(data1, data2);

如果data1和/或data2是NaN,会发生什么?

这仍然是一个有效的比较吗?

更新 我不明白为什么这个问题被降低了。只是为了解释一下,我正面临一个“Comparison method violates general contract”问题。

我这样做......

if(Double.isNaN(data1)) data1 = Double.Positive_Infinity;
if(Double.isNaN(data2)) data2 = Double.Positive_Infinity;
在Double.compare之前

但仍然出现此错误。

所以,我需要了解是否有一些基本的东西我不理解。

1 个答案:

答案 0 :(得分:3)

如果您要将NAN与自身进行比较,则会返回无序结果。 Java document说:

  

溢出的操作会产生有符号的无穷大操作   下溢产生非规范化值或有符号零,和   没有数学上明确结果的操作会产生NaN。所有   以NaN作为操作数的数值运算会产生NaN。如   已经描述过,NaN是无序的,所以进行数值比较   涉及一个或两个NaN的操作返回false和任何!=   涉及NaN的比较返回true,包括x!= x,当x是NaN时。