Как исправить ошибку OverflowError: int too large to convert to float
Есть задание в котором следует исследовать ряд на сходимость

Условие окончания цикла вычисления суммы принять в виде: | un | <E або | un | > G где Е - малая величина для прерывания цикла вычисления суммы схождения ряда (е = 10-5 ... 10-20); G - величина для прерывания цикла вычисления суммы расхождения ряда (g = 102 ... 105).
и у меня есть некий скрипт:
def task_series12():
"""check the series (variant 12) for convergence"""
n = 1
s = u = 2
e = 1e-10 # g = 1e+5
while abs(u) > e: # abs(u)>g
print(u)
n += 1
if n ** math.sqrt(n) == 0:
break
u = (math.factorial(n) * math.exp(n)) / (n ** math.sqrt(n))
s += u
else:
print("Series converge to: ", s) # "Maximum sum is:"
return True
print("Division by zero!")
return False
но как итог выбивает ошибку OverflowError: int too large to convert to float
Как это исправить?
Ответы (2 шт):
Вызов math.factorial(n), n > 170 порождает числа которые не могут быть переведены во float.
Чтобы это исправить, выразите член ряда a(n + 1) через a(n). Вычисляйте их в цикле друг через друга. Так вы продвинетесь дальше.
Но далеко вы не уйдёте. Чтобы понять почему, печатайте значения a(n) и вспоминайте условие сходимости ряда.
Зря вы игнорировали часть задания "G - величина для прерывания цикла вычисления суммы расхождения ряда". Вам надо проверять и эту часть. Ряд может как сходиться, так и расходиться.
Если вам нужно в цикле проверять несколько условий выхода, то лучше это делать так:
e = 1e-10
g = 1e+5
while True:
if abs(u) < e:
print('Ряд сошёлся')
break
if abs(u) > g:
print('Ряд разошёлся')
break
# остальное тело цикла