我是 Python 的新手,我在阅读 此 页面时看到了一个奇怪的语句:
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
x 等于比它大的数?!我感觉到原力受到干扰。
我知道在 Python 3 中,整数没有固定的字节长度。因此,没有整数溢出,就像 C 的 int
的工作方式一样。但是内存当然不能存储无限的数据。
我认为这就是为什么 n+1
的结果可以与 n
相同:Python 无法分配更多内存来执行求和,因此它被跳过,并且 n == n
是真的。那是对的吗?
如果是这样,这可能会导致程序的结果不正确。为什么 Python 在无法进行操作时不引发错误,就像 C++ 的 std::bad_alloc
?
即使 n
不是太大并且检查评估为假, result
- 由于乘法 - 将需要更多字节。 result *= factor
会因为同样的原因而失败吗?
我在 Python 官方文档中找到了它。检查大整数/可能的整数“溢出”真的是正确的方法吗?
原文由 klenium 发布,翻译遵循 CC BY-SA 4.0 许可协议
Python3
只有浮点数在 python 中有硬性限制。整数 在 python3 中被实现为任意大小的“长”整数对象, 并且 通常不会溢出。
您可以使用以下代码测试该行为
您可能还想看看 sys.float_info 和 sys.maxsize
蟒蛇2
在 python2 中,如果整数如 数字类型文档 中所述太大,则会自动转换为长整数
为什么不试试呢?
Python 有一个特殊的 float 值表示无穷大(也有负无穷大),如 float 文档中所述