【发布时间】:2017-05-15 15:43:51
【问题描述】:
为什么会出现以下结果:
double a = 0.0/0.0;
double b = 0/0.0;
= NaN
但结果例如:
double e = 0.1/0.0;
double e = 12.0/0.0;
double f = 1.0/0.0;
= 无限
我了解double 或float 部门在某种程度上有所不同。我对生成的 NaN 感到非常满意,因为当某物被零除时,结果未定义。但是为什么他们定义大于零除以零的结果是Infitity?这与他们用来执行浮点除法的方法有关吗?
【问题讨论】:
-
这与 JLS 15.17.2 的行为完全相同:“零除以零会导致 NaN...非零有限值除以零会导致有符号无穷大。”你会建议结果是什么?这很常见——甚至可能是 IEEE754 所要求的。
-
所有这些数学表达式 0/0、∞/∞、0 × ∞、∞ - ∞、1∞ 和 ∞0。产生一个不确定的形式
-
@JonSkeet 我预计结果相同(均为 NaN)且不依赖于除法的分子。
-
@ClaudioP:那么基本上你的期望是不恰当的,因为它已经明确了它会做什么。您可能还想阅读stackoverflow.com/questions/14682005。
标签: java floating-point double