Вычисление по модулю с numpy для большого целого числа (> 63 бит) иногда дает неверные результаты.
Например:
import numpy
numpy.mod(12345678912345679000, 3)
numpy.mod(12345678912345679001, 3)
numpy.mod(12345678912345679002, 3)
все дают результат 1.0
. Обратите внимание, что между вторыми 7
и 9
нет 8
.
Это может быть связано с тем, что int больше 63 бит.
Однако иногда выдаются правильные результаты.
Например,
numpy.mod(123456789123456789100, 3)
numpy.mod(123456789123456789101, 3)
numpy.mod(123456789123456789102, 3)
дают правильные результаты 1
, 2
и 0
соответственно. Обратите внимание, что эти новые целые на 3 бита длиннее, чем раньше, с добавлением 8
между вторыми 7
и 9
.
Любая идея, почему numpy .mod будет иметь такое поведение и как я могу работать с большими значениями (> 63 бит) согласованно с numpy?
Заранее спасибо!
Я работаю Python 3.7.3 (v3. 7.3: ef4ec6ed12, 25 марта 2019, 22:22:05) [MS C v.1916 64 бит (AMD64)] на 64-битной windows с numpy v1.18.1.