为什么我的 Python 在进行溢出计算时会冻结?

Why does my Python freeze when I do an overflow calculation?

我是一名 MATLAB 用户,正在努力理解 Python 如果这很明显,我深表歉意。

如果我说

print(9**9)

我得到: 387420489

太棒了。

如果我说print(9**9**9) Python 只是无限期地坐在那里并冻结(我使用 Spyder 版本 4)。 Ctrl-C 不会阻止它。 为什么它不立即 return Inf?这是预期的行为吗?

num9**9**9计算量很大
你可以等到 return 结果
这可能需要很长时间

Why does my Python freeze when I do an overflow calculation?

因为没有发生溢出,python也没有放弃。 Python 将扩展精度,直到计算成功或机器内存不足。

当用整数进行数值计算时,python 仅限于特定于机器的数字,例如 "int32",因此数字如“ 2147483647”对它来说意义不大。相反,它使用 "big integer" 库,原则上,只要有足够的内存,它就可以表达任何大数。当面对诸如 9**9**9 python 之类的计算时,会尝试 准确地 执行它,从而产生准确的结果,无论结果有多大。对于这个特定的计算,它只需要很多时间(并且内存,大概在内部 python 正在尝试根据需要分配越来越多的内存)。