有人可以解释在执行以下计算之后原始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
答案 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()返回零,你就会做到这一点。