首页 > 解决方案 > Python 3 中非常大的整数的 MemoryError vs OverflowError

问题描述

在测试 Python 3 如何处理非常大的整数(太大而无法实际分配)的限制时,我注意到 up to 2**69175290276410818320, aMemoryError被提出:

>>> 1 << 69175290276410818320
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

而当您要求再多一点时,您会得到OverflowError

>>> 1 << 69175290276410818321
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: too many digits in integer

此更改点位于7*sys.maxsize + sys.maxsize//2 - 231(对于 64 位 Python 3.8.6),这似乎有点随意。

来自Python 3 文档(强调我的):

异常溢出错误

当算术运算的结果太大而无法表示时引发。整数不会发生这种情况(宁愿引发 MemoryError 而不是放弃)。但是,由于历史原因,有时会为超出所需范围的整数引发 OverflowError。由于 C 中浮点异常处理缺乏标准化,因此大多数浮点运算都没有检查。

我的问题是:这些历史原因是什么?这个特定范围是如何产生的?

标签: pythonpython-3.xinteger-overflow

解决方案


推荐阅读