提问人:Petr 提问时间:10/21/2023 最后编辑:Karl KnechtelPetr 更新时间:10/22/2023 访问量:115
complex(“inf”) ** 1 抛出 OverflowError
complex("inf") ** 1 throws OverflowError
问:
在 Python 3.10.9 中,此示例引发:OverflowError: complex exponentiation
complex("inf") ** 1
但这有效,评估为:(nan+nanj)
complex("inf") ** 2
为什么它以这种方式工作?是否有要报告的错误?
答:
-3赞
DataAngel
10/21/2023
#1
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)。
因此,这里没有与这些操作相关的隐藏错误。
评论
0赞
DataAngel
10/21/2023
@simon我从这里得到它 geeksforgeeks.org/ieee-standard-754-floating-point-numbers
4赞
snakecharmerb
10/21/2023
我不知道你为什么被否决,但如果在 Python 中可以表示,那么你就不能只是挥手引发错误,因为它应该是一个空操作。complex('inf')
complex('inf') ** 1
1赞
simon
10/21/2023
@snakecharmerb因为你刚才写的东西,我对答案投了反对票。此外,第二种情况也没有意义:即使 complex(“inf”) ** 2 被解释为 complex(“inf”) * complex(“inf”),那么根据 DataAngel 引用的表,答案应该是 inf+0j 而不是 nan+nanj。所以第二部分也是挥手。因此,总而言之,这两种情况都不能用 DataAngel 在其评论中引用的网站上的信息来争论。
1赞
ti7
10/22/2023
@DataAngel不要因为反对票而气馁,它们是生活中的事实,相反,请尝试写一个好的答案 - 此外,请不要破坏您的帖子 meta.stackoverflow.com/questions/372007/......
2赞
simon
10/22/2023
@DataAngel 我为我关于使用 ChatGPT 的评论道歉,并已将其删除。很明显,你已经把自己的想法投入到了答案中。不过,我支持我的反对票:我仍然相信你的答案在事实上是不正确的——这是投反对票的正当理由。我试图在评论中阐明我的理由,为什么我认为这是错误的。不要气馁。再试一次,不要苦涩,继续前进。答案不是根据你的声誉来判断的(至少,它们不应该是),而是根据它们的质量来判断。
评论