其他分享
首页 > 其他分享> > 在c中实现泊松分布

在c中实现泊松分布

作者:互联网

我正在尝试编写一个程序来计算泊松分布的概率质量函数,P(x = n)和参数lambda,使用这个公式:((e ^ -lambda)*(lambda ^ n))/ n!

当我使用小lambda和小数字时这种方法很有效,但如果我想用lambda 20计算例如P(x = 30),结果是4.68903e 006,这是错误的.

我认为问题是计算n!.我实现了一个计算阶乘值的函数,并使用无符号长long数据类型作为阶乘计算的结果,但问题是数量为30!等于265,252,859,812,191,058,636,308,480,000,000,无符号多头的最大数量为18,446,744,073,709,551,615,小于30!

我该怎么办才能解决这个问题?在c中有没有其他方法或任何函数来计算这个prabability?

数据类型

解决方法:

处理大n的一种解决方法是计算日志域中的分布:

X = ((e^-lambda)*(lambda^n))/n!
ln X = -lambda + n*ln(lambda) - Sum (ln(n))
return e^X

标签:poisson,factorial,c,distribution
来源: https://codeday.me/bug/20190722/1504881.html