复杂(“inf”)** 1 抛出 OverflowError

Pet*_*etr 5 python infinity complextype

在 Python 3.10.9 中,此示例引发OverflowError: complex exponentiation

complex("inf") ** 1
Run Code Online (Sandbox Code Playgroud)

但这是有效的,评估为(nan+nanj)

complex("inf") ** 2
Run Code Online (Sandbox Code Playgroud)

为什么会这样?有需要报告的错误吗?

小智 -3

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
Run Code Online (Sandbox Code Playgroud)

嘿彼得!这是因为复杂类不支持无限值的 ** 运算符。

** 运算符用于 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)。

因此,这里不存在与这些操作相关的隐藏错误。

  • 我不知道为什么你会被否决,但是如果 `complex('inf')` 可以用 Python 表示,那么你就不能直接挥手离开 `complex('inf') ** 1` 引发错误,因为它应该是一个空操作。 (4认同)
  • @DataAngel 我对有关使用 ChatGPT 的评论表示歉意,并已将其删除。很明显,您已将自己的想法融入到答案中。不过,我坚持我的反对票:我仍然相信你的答案实际上是不正确的——这是反对票的正当理由。我试图阐明我的理由“为什么”我认为评论中是错误的。不要灰心。再试一次,不要痛苦,继续前进。判断答案的标准不是你的声誉(至少不应该如此),而是它们的质量。 (2认同)