在Java中添加两个Double.NEGATIVE\u infinity对象
请看一下Java中的此代码段:在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
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的静态版本。谢谢,已更新。只有一个静态版本,因此您不希望在双精度;)之后使用()
)