这是一个关于nchoosek
Matlab中函数的问题。
我要找nchoosek(54,25)
,和54C25一样。由于答案大约是 10^15,所以我最初使用int64
. 然而,就象征性而言,答案是错误的。
输入:
nchoosek(int64(54),int64(25))
nchoosek(sym(54),sym(25))
输出:
1683191473897753
1683191473897752
你可以看到它们相差一个。这不是一个真正紧迫的问题,因为我现在使用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))
。这对每个人都一样吗?