我正在使用python3和numpy版本1.8.2(与numpy 1.10.4和python2相同的问题)并试图做一些非常基本的东西:乘以两个整数.
import numpy as np
a = 9223372036854775808
type(a)
b = np.int64(0)
type(b)
type(b*a)
Run Code Online (Sandbox Code Playgroud)
但输出是:
builtins.int
numpy.int64
numpy.float64
Run Code Online (Sandbox Code Playgroud)
所以两个整数的乘法返回一个浮点数!有没有合理的解释呢?
请注意,如果我改为
a = 9223372036854775807
type(b*a)
Run Code Online (Sandbox Code Playgroud)
回报
numpy.int64
Run Code Online (Sandbox Code Playgroud)
如果我把它提高到
a = 92233720368547758100
type(b*a)
Run Code Online (Sandbox Code Playgroud)
返回(在python3中)
builtins.int
Run Code Online (Sandbox Code Playgroud)
和(在python2中)
long
Run Code Online (Sandbox Code Playgroud)
据我所知,必须有一些溢出,但为什么呢?