IEEE 754将1/0的结果指定为∞(无穷大)。
然而,IEEE 754然后将0×∞的结果指定为NaN。
这感觉反直觉:为什么0×∞不是0?
我们可以认为1/0 =∞作为1 / z的极限,因为z趋于零
我们可以认为0×∞= 0作为0×z的极限,因为z倾向于∞。
为什么IEEE标准遵循直觉1.但不是2。?
答案 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)
的限制。