从“只是在我以为自己刚开始的时候”就挂在了“麻木坑”上
>>> 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。
您的第一个值小于此值,但其他三个值较大。因此,您会得到“环回”。注意:
-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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句