Вы генерируете целые числа, которые больше, чем могут обрабатывать значения вашей платформы или значения по умолчанию numpy int, поэтому переполняет ваши числа.
25 для седьмой степени требует 33 бита:
>>> (25 ** 7).bit_length()
33
* Встроенный целочисленный тип 1032 * равен неограничен , но numpy использует ограниченный, целые числа фиксированного размера, и для вашей установки numpy тип целого числа со знаком по умолчанию равен int32
, поэтому он не может соответствовать этому значению.
Я могу воспроизвести точно такой же вывод, если я скажу numpy преобразовать вывод в int32
:
>>> np.sum(np.power(range(26), 7)).astype(np.int32)
792709145
, но поскольку у меня MacOS на 64-битном процессоре, numpy использует int64
в качестве целочисленного типа по умолчанию и, таким образом, дает правильный результат:
>>> np.sum(np.power(range(26), 7))
22267545625
>>> np.sum(np.power(range(26), 7)).dtype
dtype('int64')
792709145
- это целочисленное значение, представленное нижними 31 битами:
>>> print(int(format(22267545625, 'b')[-31:], 2))
792709145
Вкл. Windows, однако по умолчанию numpy целочисленный тип - int32 потому что даже на 64-битном оборудовании Windows определяет C long int как 32-битное значение.
Вы должны указать numpy создать массив значений int64 здесь:
np.sum(np.power(np.arange(26, dtype=np.int64), 7))