Я использую 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)
Выход:
builtins.int
numpy.int64
numpy.float64
Таким образом, умножение двух целых чисел возвращает float! Есть ли разумное объяснение?
Обратите внимание, что если я перейду на
a = 9223372036854775807
type(b*a)
возвращает
numpy.int64
И если я подниму его на
a = 92233720368547758100
type(b*a)
возвращает (в python3)
builtins.int
и (в python2)
long
Как я понимаю, должно быть какое-то переполнение, но почему?