任意精度伽马函数 我在C++中实现了任意精度的算术库,在实现伽玛函数时,我几乎被卡住了。
通过分别使用等价的任意精度伽马函数 我在C++中实现了任意精度的算术库,在实现伽玛函数时,我几乎被卡住了。,c++,algorithm,math,floating-point,gamma-function,C++,Algorithm,Math,Floating Point,Gamma Function,通过分别使用等价的gamma(n)=gamma(n-1)*n和gamma(n)=gamma(n+1)/n,我可以为所有实值x获得一个范围(1;2]的有理数r 但是,我不知道如何计算gamma(r)。对于Lanczos近似(),我需要预先计算的值p,它正好计算非整数值(?)的阶乘而且不能用我目前的知识动态计算…在实现任意精度库时,预先计算p的值没有多大意义 有没有任何算法可以在合理的时间内以任意精度计算伽马(r)?谢谢你的帮助。Lanczos近似似乎不太糟糕。你到底怀疑什么 计算p、C(切比雪夫多
gamma(n)=gamma(n-1)*n
和gamma(n)=gamma(n+1)/n
,我可以为所有实值x
获得一个范围(1;2]
的有理数r
但是,我不知道如何计算gamma(r)
。对于Lanczos近似(),我需要预先计算的值p,它正好计算非整数值(?)的阶乘而且不能用我目前的知识动态计算…在实现任意精度库时,预先计算p的值没有多大意义
有没有任何算法可以在合理的时间内以任意精度计算伽马(r)?谢谢你的帮助。Lanczos近似似乎不太糟糕。你到底怀疑什么
计算
p
、C
(切比雪夫多项式)和(a+1/2)!
的代码部分可以实现为有状态对象,例如,您可以从p(i-1)计算p(i)
和切比雪夫系数可以计算一次,保持它们的矩阵。类似于Lanczos的近似,但可能更容易用于任意精度,因为您可以设置所需的误差。我想您已经研究过,但没有找到您需要的。看起来它更像是与数学有关,而不是与编程有关……也许,它是“最好把问题贴在那里。我也会查看MPFR的源代码,看看他们使用了什么。@乔治·索维托夫:考虑到高效实现的实际限制,我认为这是合理的主题。现代计算机算术第二4.5版(官方PDF)给出了一种方法,即对大的x
使用Stirling渐近展开,并使用函数方程将其转换为较小的x
(反射公式可以有效地将其扩展到负的x
)