0

看看 Java 中的这个片段:

double alpha = alphaFactors.get(0, q);
double beta = betaFactors.get(0, q);
if ((alpha + beta) > Double.NEGATIVE_INFINITY) {
    initialDistributionStripe.put(new IntWritable(q),
                                  new DoubleWritable(alpha + beta));
}

为了避免垃圾值,当且仅当它大于 Double.NEGATIVE_INFINITY 并且不等于 NaN 时,我想将总和 (alpha + beta) 添加到 initialDistributionStripe 映射。

我相信我所做的是正确的,我不需要明确检查“NaN”,因为根据 IEEE 754 和 Java 规范,任何与 NaN 的比较都会导致错误。因此,如果 alpha + beta 为 NaN,则为((alpha + beta) > Double.NEGATIVE_INFINITY)false。

我的推理正确吗?

4

3 回答 3

0

无论如何,我都会使用isNaN()明确检查 NaN 。更安全。

于 2011-08-22T10:22:46.150 回答
0

因此,如果 alpha + beta 为 NaN,则为((alpha + beta) > Double.NEGATIVE_INFINITY)false

这是正确的。

如果您想明确说明,可以添加&& !Double.isNaN(alpha + beta)(请记住,即使alpha + beta != Double.NaN确实如此)。truealpha + betaDouble.NaN

于 2011-08-22T10:23:13.700 回答
0

即使它做同样的事情,以下内容可能更清楚。

if (alpha > Double.NEGATIVE_INFINITY && beta > Double.NEGATIVE_INFINITY)

否则,您的逻辑似乎是正确的。

于 2011-08-22T10:23:32.983 回答