nchoosek
Matlabの関数についての質問です。
nchoosek(54,25)
54C25と同じを探したいです。答えは10^15くらいなので、本来は を使いますint64
。しかし、象徴的なものに関しては答えが間違っています。
入力:
nchoosek(int64(54),int64(25))
nchoosek(sym(54),sym(25))
出力:
1683191473897753
1683191473897752
1 つずつ異なることがわかります。私は現在 を使用しているので、これは実際には緊急の問題ではありませんsym
。しかし、誰かがなぜこれが起こるのか教えてもらえますか?
編集:
R2013aを使用しています。
を見てみるとnchoosek.m
、入力が にある場合int64
、コードは次のように単純化できることがわかります。
function c = nchoosek2(v,k)
n = v; % rename v to be n. the algorithm is more readable this way.
classOut = 'int64';
nd = double(n);
kd = double(k);
nums = (nd-kd+1):nd;
dens = 1:kd;
nums = nums./dens; %%
c = round(prod(nums));
c = cast(c,classOut);
end
しかし、結果は私int64(prod(nums./dens))
とは異なりprod(sym(nums)./sym(dens))
ます。これは誰にとっても同じですか?