exp (-3600) слишком маленький, факториал (3400) слишком большой:
In [1]: from scipy import exp
In [2]: exp(-3600)
Out[2]: 0.0
In [3]: from scipy import factorial
In [4]: factorial(3400)
Out[4]: array(1.#INF)
Как насчет посчитать это шаг за шагом, как обходной путь (и это имеет смысл
проверить самый маленький и самый большой промежуточный результат):
from math import exp
output = 1
smallest = 1e100
biggest = 0
for i,j in izip(xrange(1, 1701), xrange(3400, 1699, -1)):
output = output * 3600 * exp(-3600/3400) / i
output = output * 3600 * exp(-3600/3400) / j
smallest = min(smallest, output)
biggest = max(biggest, output)
print "output: ", output
print "smallest: ", smallest
print "biggest: ", biggest
вывод:
output: 2.37929475534e-005
smallest: 2.37929475534e-005
biggest: 1.28724174494e+214