2

我在 C++ 中实现了一个任意精度的算术库,在实现 gamma 函数时我几乎被卡住了。

通过分别使用等价gamma(n) = gamma(n - 1) * ngamma(n) = gamma(n + 1) / n,我可以获得所有实数值r范围内的有理数。(1; 2]x

但是,我不知道如何评价gamma(r)。对于 Lanczos 近似(https://en.wikipedia.org/wiki/Lanczos_approximation),我需要预先计算的值 p 恰好计算非整数值的阶乘(?!)并且不能用我的动态计算当前知识...在实现任意精度库时,预先计算 p 的值没有多大意义。

是否有任何算法可以gamma(r)在合理的时间内以任意精度进行计算?谢谢你的帮助。

4

2 回答 2

3

Spouge 的近似值类似于 Lanczos 的近似值,但可能更容易用于任意精度,因为您可以设置所需的误差。

于 2016-11-16T11:00:41.913 回答
1

Lanczos 近似似乎还不错。你到底怀疑什么?

计算p, C(Chebyshev polynomials)的部分代码(a + 1/2)!可以实现为有状态的对象,例如,您可以p(i)p(i-1)和 Chebyshev 系数计算并计算一次,同时保持它们的矩阵。

于 2016-11-15T17:42:06.437 回答