gpt4 book ai didi

python - 在什么情况下 Python 复数求幂会抛出 OverflowError?

转载 作者:太空狗 更新时间:2023-10-30 02:04:42 24 4
gpt4 key购买 nike

我想找出这里的模式:

>>> 1e300 ** 2
OverflowError: (34, 'Result too large')
>>> 1e300j ** 2
OverflowError: complex exponentiation
>>> (1e300 + 1j) ** 2
OverflowError: complex exponentiation
>>> (1e300 + 1e300j) ** 2
(nan+nanj)

这种行为似乎不仅在理论上没有明确说明,而且在实践中也很奇怪!这是怎么解释的?

最佳答案

看看 source对于复数求幂表明 Python 仅在计算结束时检查溢出。此外,小整数指数有一种特殊情况,它使用平方求幂,这涉及复数乘法。

r.real = a.real*b.real - a.imag*b.imag;
r.imag = a.real*b.imag + a.imag*b.real;

这是复数乘法的公式。请注意以下几点:

a.real*b.real - a.imag*b.imag

ab非常大时,这就变成了浮点无穷减去浮点无穷,即nannan 结果传播,经过一些操作后,结果为 (nan+nanj)Py_ADJUST_ERANGE2 仅在遇到无穷大时设置 errno,因此它错过了溢出并继续前进。

总而言之,Python 只检查最终结果是否溢出,而不检查中间值,这导致它错过了中间的溢出,因为到最后都是 nan。引发 OverflowError 的表达式这样做是因为它们从不尝试减去无穷大,所以错误在最后被发现。它看起来不像是一个深思熟虑的设计决定;您可以通过更改溢出检查的工作方式来修复它。

关于python - 在什么情况下 Python 复数求幂会抛出 OverflowError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com