为什么Infinity×0 = NaN?

时间:2016-06-15 16:45:14

标签: floating-point numbers nan ieee-754 infinity

IEEE 754将1/0的结果指定为∞(无穷大)。

然而,IEEE 754然后将0×∞的结果指定为NaN。

这感觉反直觉:为什么0×∞不是0?

  1. 我们可以认为1/0 =∞作为1 / z的极限,因为z趋于零

  2. 我们可以认为0×∞= 0作为0×z的极限,因为z倾向于∞。

  3. 为什么IEEE标准遵循直觉1.但不是2。?

1 个答案:

答案 0 :(得分:6)

如果您认为IEEE 754浮点零和无穷大的字面上为零或无限,则更容易理解它们的行为。

浮点零不仅代表实数零。它们还表示所有可以舍入到小于最小次正规值的实数。这就是零签署的原因。如果它们实际上不是零,那么即使很小的数字也会有一个符号。

类似地,每个无穷大也代表具有相应符号的所有数字,这些数字将会舍入到不适合有限范围的大小。

NaN代表“无实数结果”,例如sqrt(-1),或“没有线索”。

非常大的非常大的东西非常非常大,所以`Infinity / 0 == Infinity“。

非常小的东西乘以非常小的东西可能是任何东西,取决于我们不知道的实际大小。由于结果可能是从非常小到非常大,NaN是最合理的答案。

=============================================== ==================

虽然我认为以上是理解实际浮点行为的最佳方法,但实际数量限制也会出现类似的问题。

假设f(x)趋于无穷大,g(x)趋于零,因为x趋于无穷大。很容易证明f(x)/g(x)倾向于无穷大,x倾向于无穷大。另一方面,如果没有关于函数的更多信息,就无法证明f(x)*g(x)的限制。