原始双重等于NaN

时间:2014-08-08 14:06:25

标签: java

有人可以解释在执行以下计算之后原始double类型可能等于NaN的可能性。你可以告诉我double最终可能Nan的情况吗?谢谢!

double averagePrecisionExisting = 0;
for (int i = 0; i < x; i++)
    averagePrecisionExisting += logicWhichReturnsPrimitiveDouble();

double meanAveragePrecisionExisting = averagePrecisionExisting / x.size();    
System.out.println("Mean average precision of existing algorithm  = " + meanAveragePrecisionExisting);

输出:Mean average precision of existing algorithm = NaN

3 个答案:

答案 0 :(得分:7)

假设你的循环意味着使用x.size(),那么它非常简单 - 如果x.size()为0,你将计算0/0,即NaN。

否则,logicWhichReturnsPrimitiveDouble()可能因任何原因返回NaN。目前尚不清楚为什么你在帖子中的各个地方强调了“原始”部分 - 原始double能够将NaN表示为Double。实际上,Double.NaN的类型是double ...

答案 1 :(得分:2)

例如,这些是NaN s:

  • 0d /0d
  • Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY
  • Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY
  • Double.NaN + 1

答案 2 :(得分:1)

好吧,如果浮点运算有一些输入参数导致操作产生一些未定义的结果(例如0.0 / 0.0),则会产生NaN。

似乎如果你的x为零而x.size()返回零,你就会做到这一点。