python - 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 中浮点异常处理缺乏标准化,因此大多数浮点运算都没有检查。
我的问题是:这些历史原因是什么?这个特定范围是如何产生的?
解决方案
推荐阅读
- html - 如何在inframe中显示来自fb fanpage的最新帖子或其他内容?(对于 HTML)
- c# - C# 在 Linq 查询 WHERE 语句中返回两个纬度/经度坐标之间的计算距离
- c# - C# Blazor Micro 前端框架代码示例
- r - 如何在传单地图上使粒度更大(更平滑的缩放)?
- python - 对 admin.py 的更新未反映在 django 管理页面中
- java - Azure BlobClient downloadToFile() 抛出 java.nio.file.NoSuchFileException
- javascript - 仅功能 Jquery(没有 Select2 和 Bootstrap)?
- azure - Azure Fileshare - 在没有备份服务的情况下还原快照
- css - CSS Grid在一个块中的不同布局
- powershell - 如何:将广告描述复制到标题字段