Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中添加两个Double.NEGATIVE\u infinity对象_Java_Double_Ieee 754_Underflow - Fatal编程技术网

在Java中添加两个Double.NEGATIVE\u infinity对象

在Java中添加两个Double.NEGATIVE\u infinity对象,java,double,ieee-754,underflow,Java,Double,Ieee 754,Underflow,请看一下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

请看一下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映射中添加总和(alpha+beta),当且仅当它大于Double.NEGATIVE_无穷大且不等于NaN时

我相信我所做的是正确的,我不需要显式地检查‘NaN’,因为根据ieee754和Java规范,任何与NaN的比较都会导致错误。因此,如果alpha+beta是NaN,那么
((alpha+beta)>Double.NEGATIVE_无穷大)
将为false


我的推理正确吗?

无论如何,我都会用isNaN()显式检查NaN。更安全

因此,如果alpha+beta为NaN,则
((alpha+beta)>双负无穷大)
将为false

没错


如果您想明确说明,可以添加
&&&!Double.isNaN(alpha+beta)
(请记住,
alpha+beta!=Double.NaN
true
,尽管
alpha+beta
确实是
Double.NaN
)。

也许下面的情况更清楚,即使它做了同样的事情

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

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

您是指双精度中的
静态公共布尔isNaN(双v)
?创建一个对象来对基本体执行测试是很难看的,即使它有效。;)啊,我不知道isNaN的静态版本。谢谢,已更新。只有一个静态版本,因此您不希望在
双精度
;)之后使用
()