Проект Эйлера # 101
Я только начал изучать Numpy, и пока мне это кажется довольно простым.
Одна вещь, с которой я столкнулся, заключается в том, что когда я вычисляю многочлен, результатом будет int32, поэтому произойдет переполнение.
u = numpy.poly1d([1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1])
for i in xrange(1, 11):
print(i, u(i))
Результаты:
(1, 1)
(2, 683)
(3, 44287)
(4, 838861)
(5, 8138021)
(6, 51828151)
(7, 247165843)
(8, 954437177)
(9, -1156861335)
(10, 500974499)
Последние два пункта явно неверны.
Обходной путь, который я могу придумать, - это разложить коэффициенты на 100
u = numpy.poly1d([0.01, -0.01, 0.01, -0.01, 0.01, -0.01, 0.01, -0.01, 0.01, -0.01, 0.01])
for i in xrange(1, 11):
print(i, int(u(i) * 100))
На этот раз результаты верны
(1, 1)
(2, 682)
(3, 44286)
(4, 838860)
(5, 8138020)
(6, 51828151)
(7, 247165843)
(8, 954437177)
(9, 3138105961L)
(10, 9090909091L)
Есть ли лучший способ? Позволяет ли Numpy мне изменять тип данных? Спасибо.