为什么 float('inf') == float('inf') 返回 True,但 float('inf') - float('inf') x27;) == float('inf') 返回 False?
为什么在 Python 中会发生这种情况?
float('inf') == float('inf')
返回True
,float('inf') + float('inf') == float ('inf')
返回True
,float('inf') * float('inf') == float('inf')
返回正确
,float('inf') - float('inf') == float('inf')
返回False
,float('inf') / float( 'inf') == float('inf')
返回False
。
如果我考虑限制,我最好的猜测与此操作的结果有关:
limx→+∞(f(x) ▢ g(x)) 其中 limx→+ ∞ f(x) = +∞ 和 limx→+∞ g(x) = +∞,如果 ▢ 是 + 或 *,则返回 +∞,但未定义 (它可以返回每个值)如果 ▢是 - 或 /。
不过我很困惑。
Why does this happen in Python?
float('inf') == float('inf')
returnsTrue
,float('inf') + float('inf') == float('inf')
returnsTrue
,float('inf') * float('inf') == float('inf')
returnsTrue
,float('inf') - float('inf') == float('inf')
returnsFalse
,float('inf') / float('inf') == float('inf')
returnsFalse
.
My best guess, if I think about limits, is related with the result of this operation:
limx→+∞(f(x) ▢ g(x)) where limx→+∞ f(x) = +∞ and limx→+∞ g(x) = +∞, which returns +∞ if ▢ is + or *, but it is not defined (it could return every value) if ▢ is - or /.
I am very puzzled, though.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(3)
请参阅@thomas-weller 的回答,但此外,问题归结为这一点。因为无穷大有多种大小,所以我们在对它们进行减法和除法时会遇到问题。
抛开最近的证据不谈,一些被认为具有不同大小的无限集合实际上具有相同的大小(数学家测量无穷大并发现它们相等)。
整数列表是无限的,实数列表也是无限的。然而,任意两个相邻整数之间的实数列表也是无限的。
float("inf")
没有机会说“这是无限”与“这是无限无限”,所以我们不知道它是什么。请注意,我将从这里开始使用两个引用:
- INF === 无限
- INFINF === 无限无限
现在,我们将在哪里:
float('inf') == float('inf') = => True
看起来合理的是: (INF 或 INFINF) 等于 (INF 或 INFINF)
float('inf') + float('inf') == float( 'inf')
看起来合理的是:(INF 或 INFINF) + (INF 或 INFINF) 等于 (INF 或 INFINF)
float('inf') * float('inf') == float('inf')
这似乎是合理的:(INF 或 INFINF) * (INF 或 INFINF) 等于 (INF 或 INFINF)
float('inf') - float('inf') == float('inf')
现在我们有点坚持。从概念上讲,我们有很多潜在的答案。给定 float('inf') - float('inf')
则 0
是合理的,-INFINF
和 INFINF
也是如此代码>.这个结果是未定义的,因此nan
。事实上,正如 @thomas-weller 指出的那样,几乎任何答案都可能是合理的。
float('inf') / float('inf') == float('inf')
与上面相同的问题。由于我们不知道 float("inf")
有多大,所以这个结果是未定义的。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在进行比较之前
的结果
,先计算 。 结果是
NaN
。它是 NaN,因为无穷大的数量可能不同。 Stack Overflow 姊妹网站 Math.SE 对此进行了解释,被称为希尔伯特酒店悖论:
表示不确定的最佳数字是 NaN。将 NaN 与任何内容进行比较始终是
False
,甚至将 NaN 与自身进行比较也是如此。除了这个相当“逻辑”的解释之外,我们发现 Python 使用 IEEE754 表示用于浮点计算。
您通常需要购买 IEEE754 规范,但幸运的是我们看到一些草案版本在线。相关章节恕我直言是7.2:
Before the comparison of
can be made, the result of
will be calculated. That result is
NaN
.It is NaN because the amounts of infinity may differ. It's explained on the Stack Overflow sister site Math.SE, known as the Hilbert hotel paradox:
The best number to represent indeterminate is NaN. Comparing NaN to anything is always
False
, even comparing NaN against itself.Besides that quite "logical" explanation, we find that Python uses IEEE754 representation for floating point calculation.
You'd typically need to buy the IEEE754 specification, but luckily we see some draft version online. The relevant chapter IMHO is 7.2: