我必须计算表达式 (x+y)**n 的 c 二项式系数,其中 n 非常大(大约 500-1000)。我想到的第一个计算二项式系数的算法是乘法公式。所以我将它编码到我的程序中
long double binomial(int k, int m)
{
int i,j;
long double num=1, den=1;
j=m<(k-m)?m:(k-m);
for(i=1;i<=j;i++)
{
num*=(k+1-i);
den*=i;
}
return num/den;
}
该代码在单核线程上非常快,例如与递归公式相比,尽管后者较少受到舍入错误的影响,因为只涉及和而不是除法。所以我想测试这些算法的价值,并尝试评估 500 选择 250(订购 10^160)。我发现“相对误差”小于 10^(-19),所以基本上它们是相同的数字,尽管它们的差异类似于 10^141。
所以我想知道:有没有办法评估计算错误的顺序?有没有比乘法公式更精确的计算二项式系数的快速方法?由于我不知道我的算法的精度,我不知道在哪里截断斯特林的系列以获得更好的结果..
我已经用谷歌搜索了一些二项式系数表,所以我可以从中复制,但我发现最好的一个在 n = 100 处停止......