任意精度的函数
Arbitrary precision gamma function
我正在c++中实现一个任意精度的算术库,在实现gamma函数时我几乎卡住了。
分别利用等价的gamma(n) = gamma(n - 1) * n
和gamma(n) = gamma(n + 1) / n
,我可以得到一个在(1; 2]
范围内的有理数r
,对于所有实数x
。
然而,我不知道如何评估gamma(r)
。对于Lanczos近似(https://en.wikipedia.org/wiki/Lanczos_approximation),我需要预先计算的值p,它恰好计算非整数值的阶乘(?!),并且不能用我目前的知识动态计算…在实现任意精度库时,预计算p的值没有多大意义。
是否有算法可以在合理的时间内以任意精度计算gamma(r)
?谢谢你的帮助。
Spouge的近似与Lanczos的近似相似,但可能更容易用于任意精度,因为您可以设置所需的误差。
Lanczos的近似看起来还不错。你到底在怀疑什么?
计算p
, C
(Chebyshev多项式)和(a + 1/2)!
的部分代码可以实现为有状态对象,例如,您可以从p(i-1)
和Chebyshev系数中计算p(i)
,并计算一次,保持它们的矩阵。
相关文章:
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 为什么我的数组双精度函数不起作用?
- 如果存在从"双精度"到"T"的转换,则禁用构造函数
- f 是指向函数的指针,该函数采用 int,并返回指向不带任何内容并返回双精度的函数的指针
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 从 C++ 中的函数返回双精度的问题
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- 函数重载和双精度和长之间的混淆
- C++采用浮点数或双精度的模板函数
- 对需要双精度数组和结构作为输入C++ DLL 函数的 C# 调用
- 带有映射的 Lambda 函数,其中键是元组,值是双精度
- 有没有办法构造一个 constexpr 函数来获取双精度的位表示
- 函数双精度,整数如何工作?C++
- 这是为浮点数/双精度函数泛型的正确方法吗?
- 当将变量作为函数参数传递时,由于隐式铸造而导致的精度丧失
- 如何根据精度轻松模板化数学函数
- 双精度/整数模板函数的向量