単純な組み合わせ関数を実装しようとしていました
private int combination(int n, int k)
{
if(n>>1 < k)
k = n - k;
double mul = 1;
for(int i=n+1-k;i<n+1;i++)
mul *= i;
for(int i=k;i>0;i--)
mul /= i;
return (int)mul;
}
パラメータをとして入力combination(33,17)
すると、1166803109が返されますが、正しい番号は1166803110である必要があります。そのmul
ため、intに切り捨てる前に変数を出力すると、10進数の1.1668031099999998E9が返されますが、これは混乱を招きます。定義上、それは完全な除算でなければなりません、なぜそれは私に小数を与えるのですか?