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 と等しくない場合にのみ、initialDistributionStripe マップに合計 (アルファ + ベータ) を追加します。

IEEE 754 および Java 仕様によると、NaN との比較はすべて false になるため、「NaN」を明示的にチェックする必要はありません。したがって、アルファ + ベータが NaN の場合((alpha + beta) > Double.NEGATIVE_INFINITY)は false になります。

私の推論は正しいですか?

4

3 に答える 3

0

したがって、アルファ+ベータがNaNの場合、((alpha + beta) > Double.NEGATIVE_INFINITY)falseになります

そのとおりです。

それについて明確にしたい場合は、追加することができます(実際にはそうであっても、&& !Double.isNaN(alpha + beta)それを覚えておいてください)。alpha + beta != Double.NaNtruealpha + betaDouble.NaN

于 2011-08-22T10:23:13.700 に答える
0

同じことをしても、おそらく次のことがより明確になります。

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

そうでなければ、あなたの論理は正しいように見えます。

于 2011-08-22T10:23:32.983 に答える
0

とにかくisNaN()を使用してNaNを明示的にチェックします。より安全。

于 2011-08-22T10:22:46.150 に答える