为什么无穷大 × 0 = NaN?

Why is Infinity × 0 = NaN?

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

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

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

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

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

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

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

浮点数零不仅表示实数零。它们还代表所有会四舍五入到小于最小次正规数的实数。这就是零被签名的原因。如果它们实际上不为零,即使是很小的数字也有符号。

同样,每个无穷大也代表所有具有相应符号的数字,这些数字会四舍五入到大小不适合有限范围的某物。

NaN 表示 "No real number result",例如 sqrt(-1),或 "Haven't a clue".

非常大的东西除以非常小的东西是非常非常大的,所以 `Infinity / 0 == Infinity'。

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

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

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

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