Произвольная точность гамма-функции

Я реализую арифметическую библиотеку произвольной точности в C ++, и я довольно сильно застрял при реализации гамма-функции.

Используя эквивалентности gamma(n) = gamma(n - 1) * n а также gamma(n) = gamma(n + 1) / nсоответственно могу получить рациональное число r В диапазоне (1; 2] для всех реальных ценностей x,

Однако я не знаю, как оценить gamma(r), Для приближения Ланцоша (https://en.wikipedia.org/wiki/Lanczos_approximation), Мне нужны предварительно вычисленные значения p, которые вычисляют факториал нецелого значения (?!) И не могут быть вычислены динамически, исходя из моих текущих знаний … Предварительные вычисления значений для p не будут иметь большого смысла при реализации библиотека произвольной точности.

Есть ли алгоритмы, которые вычисляют gamma(r) в разумные сроки с произвольной точностью? Спасибо за вашу помощь.

2

Решение

Приближение Спужа похож на приближение Ланцоша, но, вероятно, проще использовать для произвольной точности, так как вы можете установить желаемую ошибку.

1

Другие решения

Приближение Ланцоша выглядит не так уж плохо. Что именно вы подозреваете?

Части кода, которые рассчитывают p, C (Чебышевские полиномы) и (a + 1/2)! могут быть реализованы как объекты с сохранением состояния, так что, например, вы можете рассчитать p(i) от p(i-1) и коэффициенты Чебышева и рассчитываются один раз, сохраняя их матрицу.

0

По вопросам рекламы [email protected]