为什么无穷大 × 0 = NaN?
Why is Infinity × 0 = NaN?
IEEE 754规定1 / 0的结果为∞(无穷大)。
然而,IEEE 754随后将0×∞的结果指定为NaN。
感觉反直觉:为什么0×∞不是0?
我们可以认为1 / 0 = ∞是1 / z的极限,因为z趋于零
我们可以认为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)
的任何极限。
IEEE 754规定1 / 0的结果为∞(无穷大)。
然而,IEEE 754随后将0×∞的结果指定为NaN。
感觉反直觉:为什么0×∞不是0?
我们可以认为1 / 0 = ∞是1 / z的极限,因为z趋于零
我们可以认为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)
的任何极限。