众所周知,Python 的整数是不会溢出的,例如运行如下代码,Python 可以完整地计算出 $2^{100}$
1 | print(2 ** 200) |
但是,在执行以下代码时,发现整数却溢出了
1 | import numpy as np |
这是为什么呢?Python 的整数怎么会溢出呢?我们输出中间的计算过程
1 | import numpy as np |
看来是在最后一步溢出的,难道是 Python 算错了吗?单独计算
1 | print(9534522 << 8) |
可以看到,单独计算 9534522 << 8
的结果确是正确的。进一步调试,发现 result
的类型竟然是 int32
而不是 int
原来是因为 array
中的数据类型是 np.int32
,因此变量 i
的类型也是 np.int32
,在执行 result += i
后,int
类型与 np.int32
类型相加后结果被转成了 np.int32
这才出现了整数溢出。因此,只需将 i
的类型转为 int
就不会发生溢出了。修改前面的代码
1 | import numpy as np |