为什么`1e500 - 1e500`会导致`nan`

时间:2021-06-27 14:33:37

标签: python python-3.x

不是一个非常重要的问题,但我只是对 Python 中的以下行为感到好奇:

Teacher

这种行为的原因是什么?为什么不返回 1e500 - 1e500 >>> nan

我想大多数使用 0 的计算也很奇怪,但至少对我来说这个 1e500 是有道理的,因为差异可以忽略不计。

编辑

This question 被建议作为我问题的答案,但在我看来,答案并没有解释为什么这不会是 0,只是它会是 1e500 - 10000 = inf

2 个答案:

答案 0 :(得分:4)

1e500 太大,无法用双精度浮点数表示,所以它变成了 inf

inf-inf 给出 NaN

答案 1 :(得分:0)

我认为 1e500 是一个数字,但真正的问题是在 Python 中 1e500 被认为是无穷大,因为它使用底层平台提供的任何浮点类型,这是标准的IEEE 754 行为(感谢 @chpner 在评论中的解释)。

因此,计算是不可能的,因为 infinity - infinity 本身是不可能的(解释为 here),这是我之前不知道的。