【发布时间】:2015-07-21 07:35:03
【问题描述】:
我正在尝试编写一个程序来计算带有参数 lambda 的泊松分布的概率质量函数 P(x=n),使用以下公式:( (e^-lambda)*(lambda^n))/n!
当我使用小 lambda 和小数字时,这种方法效果很好,但如果我想用 lambda 20 计算例如 P(x=30),结果是 4.68903e+006,这是错误的。
我认为问题在于计算 n!。我实现了一个计算阶乘值的函数,并使用unsigned long long数据类型作为阶乘计算的结果,但问题是30的数量!等于 265,252,859,812,191,058,636,308,480,000,000 并且 unsigned long long 可用的最大数量为 18,446,744,073,709,551,615,小于 30!。
我应该怎么做才能处理这个问题?有没有其他方法或函数可以在 c++ 中计算这种概率?
数据类型
【问题讨论】:
-
为什么投反对票?这个问题有什么问题?
-
@Cheiron:很难在我们看不到的代码中找到错误。 SO 指南在这一点上相当明确。
-
@MSalters 问题不必包含关于 SO 主题的代码。事实上,许多排名最高的问题都没有代码。
-
@isarandi:我知道,我关注 Meta.SO。但只要看看第三段的开头:我认为问题是......。这就是为什么我们确实需要代码(如果存在)。
-
SO 指南还具体说明了您应该在对帖子投反对票时评论错误之处。
标签: c++ distribution factorial poisson