从“正当我以为我正在抓到纽比的窍门”的文件。。。
>>> import numpy as np
>>> y = np.array((1650, 2300, 2560, 3710)) * 1000000
>>> y
array([ 1650000000, -1994967296, -1734967296, -584967296])
我以前的数学老师会同意第一个结果,但是其他的呢???
FWIW,在64位Win 10上运行Python 3.6.3,还可以获得(如预期的那样)
>>> 2300 * 1000000
2300000000
最佳答案
这是由于整数的最大值为2 ^ 31 - 1=2147483647。
你的第一个值比这个小,但是其他3个值更大。因此你得到了“循环”。注意:
-1994967296 = -2147483648 + (2300000000 - 2147483647 - 1)
所以基本上你已经到最大值(2147483647)加1去最低(-2147483648),然后从那里继续。
你可以通过强制64位精度来解决这个问题
>>> import numpy as np
>>> y = np.array((1650, 2300, 2560, 3710), dtype='int64') * 1000000
>>> y
array([1650000000, 2300000000, 2560000000, 3710000000], dtype=int64)