为什么在 Python 中会发生这种情况?
\nfloat('inf') == float('inf')返回True,float('inf') + float('inf') == float('inf')返回True,float('inf') * float('inf') == float('inf')返回True,float('inf') - float('inf') == float('inf')返回False,float('inf') / float('inf') == float('inf')返回False。如果我考虑限制,我最好的猜测与此操作的结果有关:
\nlim x\xe2\x86\x92+\xe2\x88\x9e (f(x) \xe2\x96\xa2 g(x)) 其中 lim x\xe2\x86\x92+\xe2\x88\x9e f(x) = +\xe2\x88\x9e 和 lim x\xe2\x86\x92+\xe2\x88\x9e g(x) = +\xe2\x88\x9e,如果 \xe2\x96\ 则返回 +\xe2\x88\x9e xa2 是 + 或 *,但如果 \xe2\x96\xa2 是 - 或 /,则未定义(它可以返回每个值)。
\n不过我很困惑。
\n比较之前
\nfloat(\'inf\') - float(\'inf\') == float(\'inf\')\nRun Code Online (Sandbox Code Playgroud)\n可以得到,结果
\nfloat(\'inf\') - float(\'inf\')\nRun Code Online (Sandbox Code Playgroud)\n将被计算。那个结果是NaN。
它是 NaN,因为无穷大的数量可能不同。Stack Overflow 姊妹网站Math.SE对此进行了解释,称为希尔伯特酒店悖论:
\n\n\n从外行人的角度来看,想象一下我有无数个酒店房间,每个房间的编号为 1, 2, 3, 4, ...
\n然后我把它们全部给你。我不会剩下,所以 \xe2\x88\x9e\xe2\x88\x92\xe2\x88\x9e=0
\n另一方面,如果我把所有奇数都给你,那么我还剩下无穷多个。所以\xe2\x88\x9e\xe2\x88\x92\xe2\x88\x9e=\xe2\x88\x9e。
\n现在假设我给你除了前七个之外的所有内容。然后 \xe2\x88\x9e\xe2\x88\x92\xe2\x88\x9e=7。\n虽然这不能解释为什么这是不确定的,但希望你能同意它是不确定的!
\n
表示不确定的最佳数字是 NaN。将 NaN 与任何事物进行比较总是如此False,甚至将 NaN 与其自身进行比较。
除了这个相当“逻辑”的解释之外,我们发现Python使用IEEE754表示来进行浮点计算。
\n您通常需要购买 IEEE754 规范,但幸运的是我们在网上看到了一些草案版本。相关章节恕我直言是7.2:
\n\n\n对于以浮点格式生成结果的操作,发出无效操作异常信号的操作的默认结果应为安静的 NaN [...]
\n[...]
\nd) 加法或减法或 fusedMultiplyAdd:无穷大的幅度减法,如:\naddition(+\xe2\x88\x9e, \xe2\x88\x92\xe2\x88\x9e)
\n