Гамма функция на python
def fac(x,n):
i=1
s=1
while i<=n:
s=s*((i+1)/i)**x*i/(x+i)
i=i+1
return s
print(fac(5,200000))#->119.99400022498341
Это код гамма функции. Работает вроде правильно, но сходимость медленная.
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Просто ускорить код примерно в 40 раз можно с помощью Numba (ускорение и распараллеливание простых вычислений):
from numba import njit
@njit
def fac(x,n):
s=1
for i in range(1, n+1):
s=s*((i+1)/i)**x*i/(x+i)
return s
print(fac(5,100_000_000))
# 119.99998821343507
# 1 секунда
А дальше уже нужно в сторону математики смотреть - к чему эта формула сходится, кардинально тут улучшать в расчётах нечего чисто программными методами, потому что на каждом шаге меняется i и уменьшить вычисления между шагами алгоритма не получится. Кэширование тут тоже не поможет никак. Только математика.