计算二项分布概率时的浮点错误

计算科学 matlab 浮点
2021-12-13 19:14:15

我得到了一个二项分布:

B(m+n;n,p)=(m+n)!m!n!pmqn.

这里m=103,n=102,p=102,q=1p.

我正在使用 MATLAB 来计算日志B(m+n;n,p)并将值存储在logB

m=10^3;
n=10^2;
p=10^(-2);
q=1-p;
logB=log(factorial(m+n)/(factorial(m)*factorial(n))*p^m*q^n)

我得到logB作为 NaN 。如何修改公式以避免浮点错误并获得有效答案?

1个回答

这就是gammaln存在的原因

logB = gammaln(m+n+1) - gammaln(m+1) - gammaln(n+1) + m*log(p) + n*log(q);