用于排序的Java双NaN比较
我正在为一个类实现Comparator,当覆盖compare时,我有一个问题用于排序的Java双NaN比较,java,double,nan,comparator,Java,Double,Nan,Comparator,我正在为一个类实现Comparator,当覆盖compare时,我有一个问题 double data1 = GetValueOf(Data1); double data2 = GetValueOf(Data2); int compareResult = Double.compare(data1, data2); 如果data1和/或data2为NaN,会发生什么情况 这仍然是要执行的有效比较吗 更新 我不明白为什么这个问题被低估了。我只是想解释一下,我面临着一个“问题” 我在做这个 if(Do
double data1 = GetValueOf(Data1);
double data2 = GetValueOf(Data2);
int compareResult = Double.compare(data1, data2);
如果data1和/或data2为NaN,会发生什么情况
这仍然是要执行的有效比较吗
更新
我不明白为什么这个问题被低估了。我只是想解释一下,我面临着一个“问题”
我在做这个
if(Double.isNaN(data1)) data1 = Double.Positive_Infinity;
if(Double.isNaN(data2)) data2 = Double.Positive_Infinity;
在Double.compare之前,但仍然会出现此错误
所以,我需要了解是否有一些基本的东西我不了解。如果将NAN与自身进行比较,则返回一个无序的结果。 Java说: 溢出的操作产生有符号的无穷大,这是一个操作 下溢产生一个非规范化值或有符号零,以及 没有数学上确定结果的运算产生NaN。全部的 以NaN作为操作数的数值操作将产生NaN作为结果。作为 已经描述过,NaN是无序的,因此进行数值比较 涉及一个或两个NAN的操作返回false和any= 涉及NaN的比较返回true,包括x=当x为NaN时为
您是否阅读了Java语言规范以找到答案?如果您正在覆盖
Comparator
中的compare()
,则只有您负责验证和比较数据。如果在比较过程中发现的任何无效数据引发了异常
@JimGarrison,则技术不承担任何责任,我确实查看了java文档,但我想了解一下关于使用Double.compare的意见。您是否阅读了java文档,它引用了哪些内容?NaN处理是否适合您,只有您可以根据数据结构的要求来确定。