Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Python在执行溢出计算时会冻结?_Python_Math_Freeze - Fatal编程技术网

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

为什么我的Python在执行溢出计算时会冻结?,python,math,freeze,Python,Math,Freeze,我是一个试图理解Python的MATLAB用户,如果这是显而易见的,我很抱歉 如果我说 print(9**9) 我得到: 387420489 太好了 如果我说print(9**9**9) Python只是无限期地停留在那里并冻结(我使用Spyder版本4)。Ctrl-C并不能阻止它。 为什么它不立即返回Inf?这是预期的行为吗?数值9**9**9非常大,无法计算 您可以等待,直到它返回结果 这可能需要很长时间 为什么我的Python在执行溢出计算时会冻结 因为没有发生溢出,python也没有放

我是一个试图理解Python的MATLAB用户,如果这是显而易见的,我很抱歉

如果我说

print(9**9)
我得到: 387420489

太好了

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

数值
9**9**9
非常大,无法计算
您可以等待,直到它返回结果
这可能需要很长时间

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


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

当使用整数进行数值计算时,Python不仅限于特定于计算机的数字,如“int32”,因此,诸如“2147483647”的数字对它来说意义不大。相反,它使用一个“大整数”库,原则上,只要有足够的内存,它就可以表示任意大的数字。当遇到诸如
9**9**9
python之类的计算时,python会尝试精确地执行它,产生精确的结果,不管它有多大。对于这个特殊的计算,它只需要花费大量的时间(和内存,据推测python内部正试图根据需要分配越来越多的内存)。

您希望
print(9**9**9)
的输出是什么?Inf或最大整数2147483647(For或int32)。在任何情况下,返回一些东西,不要只是坐在那里。有什么
(9**9**9)
Inf或最大整数2147483647有关吗?python使用大整数。它可能正在尝试打印它。我承认您的答案是正确的。从我的角度来看,这似乎是一种奇怪的行为。这是一个微不足道的、人为的例子,但如果我正在开发一个更复杂的算法,我应该期待python会这样做吗每次我遇到一些导致溢出计算的错误时都会冻结?你一直声称它已冻结。它仍在计算。而且通用语言不能采用与代数引擎相同的快捷方式。你的观点只是其中之一。Python还必须为其他不能使用任何此类快捷方式的用例提供解决方案。谢谢对于你的答案。这是100%合乎逻辑的。我只是想了解一下实际的设计决策,为什么这会有用,而不是另一种只会明确通知你(潜在)溢出情况的行为。@tomiyama:python报告溢出和python报告溢出到底有什么区别“内存不足”。后者事实上更正确,因为它提供了更多信息。如果您选择将“内存不足”解释为“溢出”,您可以很容易地选择。此外,python无法提前确定哪些计算将超过内存限制。它只能尝试计算并查看发生了什么。