为什么我的 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 正在尝试根据需要分配越来越多的内存)。
我是一名 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 正在尝试根据需要分配越来越多的内存)。