我像这样的代码使用numpy
>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712Run Code Online (Sandbox Code Playgroud)
我猜结果必须是5000000050000000
我注意到,直到五个数字,结果还可以.有人知道发生了什么事吗?
问候
Numpy在这里没有犯错.这种现象称为整数溢出.
x = np.arange(1,100000001)
print(x.sum()) # 987459712
print(x.dtype) # dtype('int32')
Run Code Online (Sandbox Code Playgroud)
用于arange给定输入的32位整数类型根本不能容纳5000000050000000.最多可以使用2147483647.
如果显式使用更大的整数或浮点数据类型,则会得到预期的结果.
a = np.arange(1, 100000001, dtype='int64').sum()
print(a) # 5000000050000000
a = np.arange(1.0, 100000001.0).sum()
print(a) # 5000000050000000.0
Run Code Online (Sandbox Code Playgroud)
我怀疑你使用的是Windows,其结果的数据类型是32位整数(而对于那些使用,例如,Mac OS X或Linux,数据类型是64位).注意5000000050000000 % (2**32) = 987459712
尝试使用
a = np.arange(1, 100000001, dtype=np.int64).sum()
Run Code Online (Sandbox Code Playgroud)
要么
a = np.arange(1, 100000001).sum(dtype=np.int64)
Run Code Online (Sandbox Code Playgroud)
PS任何不使用Windows的人都可以按如下方式重现结果:
>>> np.arange(1, 100000001).sum(dtype=np.int32)
987459712
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |