手动计算二项式系数?

时间:2014-12-06 00:06:23

标签: c++

我还是很新的C ++,但我试着生成一个函数来计算40选择20.我遇到的主要问题是double没有给出足够的小数点精度来准确计算这个,这是我的代码;

#include <iostream>

using namespace std;

int main(){

    double n = 1;

    for(double i=20;i>1;i--){
        n = n*((20+i)/i);
        cout << n << " " << i << endl;
    }

    cout << n << endl;

}

cout纯粹是为了看看正在计算什么。如果你自己运行,你会发现,对于i = 9,结果是44350.7,问题在于它似乎总是把它带到6个有效数字,这会导致计算中出现问题。是否有可能解决这个问题?

或者我应该使用一些预定义的二项式系数函数(我在哪里找到一个?)。

编辑:我很抱歉,但这与之前的答案有关,但这并不是很有用。即使从链接的线程复制代码也会产生600选择3的正确答案,但是40选择20的错误答案(例如将答案与wolfram答案进行比较表明这一点)。它也不是非常新用户友好的,当我们分割时,为什么“结果”被归类为int并且获得非整数的结果似乎没有意义。事实上,它适用于600选择3,因为我们只划分3和2,这恰好在这种情况下很方便。

这就是为什么我坚持使用双打,因为循环需要在某些点上不是完整整数的数字。如果不是因为精确度不够高而无法产生正确的答案,那么双打就没问题了。

0 个答案:

没有答案