complex("inf") ** 1 抛出 OverflowError

问题描述 投票:0回答:1

在 Python 3.10.9 中,此示例引发

OverflowError: complex exponentiation
:

complex("inf") ** 1

但这可行,评估为

(nan+nanj)

complex("inf") ** 2

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

python infinity complextype
1个回答
-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)。

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

© www.soinside.com 2019 - 2024. All rights reserved.