Добавление двух объектов Double.NEGATIVE_INFINTIY в Java - PullRequest
0 голосов
/ 22 августа 2011

Посмотрите на этот фрагмент на 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));
}

Чтобы избежать значений мусора, я хочу добавить к карте initialDistributionStripe сумму (альфа + бета), если и только если она больше Double.NEGATIVE_INFINITY и не равна NaN.

Я считаю, что то, что я делаю, правильно, и мне не нужно явно проверять «NaN», потому что в соответствии со спецификацией IEEE 754 и Java, любое сравнение с NaN приводит к ложному. Так что если альфа + бета - NaN, то ((alpha + beta) > Double.NEGATIVE_INFINITY) будет ложным.

Верны ли мои рассуждения?

Ответы [ 3 ]

0 голосов
/ 22 августа 2011

Так что если альфа + бета равна NaN, то ((alpha + beta) > Double.NEGATIVE_INFINITY) будет ложным

Это верно.

Если вы хотите быть откровенным об этом, вы можете добавить && !Double.isNaN(alpha + beta) (Имейте в виду, что alpha + beta != Double.NaN это true, хотя alpha + beta действительно Double.NaN).

0 голосов
/ 22 августа 2011

Возможно, следующее яснее, даже если оно делает то же самое.

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

В противном случае ваша логика кажется правильной.

0 голосов
/ 22 августа 2011

Я бы в любом случае явно проверил наличие NaN с помощью isNaN () . Безопаснее.

...