在 Python 3.10.9 中,此示例引发
OverflowError: complex exponentiation
:
complex("inf") ** 1
但这可行,评估为
(nan+nanj)
:
complex("inf") ** 2
为什么会这样?有错误需要报告吗?
import math
Infinity = complex(math.inf, 0) # or complex("inf") whichever returns (inf+0j)
print(Infinity)
result0 = Infinity ** 2
print(result0) # prints (nan+nanj)
result1 = Infinity ** 1
print(result1) # prints OverflowError: complex exponentiation
嘿彼得! 这是因为复杂类不支持无限值的 ** 运算符。
** 运算符在 Python 中用于求幂。 当应用于复数时,它将第一个数字计算第二个数字的幂。 但是,如果其中一个数字是无限的,则结果是不确定的。
此编程行为由 IEEE 754 浮点标准定义。 在此标准中,一些规则管理涉及“inf”和“nan”的操作,并且这些规则在大多数编程语言(包括 Python)中一致实现。
复杂(“inf”)** 1:
在这种情况下,您正在计算无穷大的 1 次方。 根据规则,任何数的 1 次方都保持不变。 因此,结果是 inf(正无穷大)。所以 python 无法在这里计算它并给你一个错误。
复杂(“inf”)** 2:
在这里,你正在对无穷大进行平方。 根据规则,这会产生一个复数,其实部为“inf”,虚部为“nan”
然而,Python 选择使用特殊值 NaN(非数字)来表示未定义的值。 因此,complex(math.inf, 0) ** 2 的结果是 (nan+nanj)。
所以,这里不存在与这些操作相关的隐藏错误。