为什么Microsoft Excel中的POISSON函数不一致?

时间:2019-04-01 05:18:45

标签: excel vba excel-formula excel-2013

POISSON函数中有一个定义:

#NUM!错误–出现以下任何一种情况

  • x的给定值小于零;
  • 均值的给定值为 小于零。

但是我尝试在Excel 2013中执行此操作。它给了我不同的价值。这是我的示例:

=POISSON(0,-0.5,FALSE)

结果是:1.648721271 而不是#NUM!

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

推测而言,该错误可能是作为优化而产生的。 Poisson(x,m,TRUE)被定义为e^(-m)*(m^x)/x!。当m^x为浮点数时,一种计算m的方法是e^(x*Ln(m))。在电子表格中,您可以观察到

=POISSON(A1,A2,TRUE) - EXP(-A2)*EXP(A1*LN(A2))/FACT(A1)
只要A1,A2在正确的域中,

总是精确地计算为0(例如,如果计算使用其他方法,则可能不是0.0000000001)。 此外,EXP(-A2)*EXP(A1*LN(A2))/FACT(A1)在应该失败时会失败,而在喂入#NUM!时会给出0, -0.5。我的猜测是,Excel程序员最初使用的公式在应该失败时会失败,让调用的函数在适当的时候引发错误。然后有人想到了只在EXP(-mean)时返回x = 0的想法(因为在这种情况下,当表达式完全定义时,表达式的其余部分为1 )。毕竟-当您知道某物为1时,为什么还要麻烦计算呢?

我感到惊讶的是,POISSON.DIST中的bug仍然存在,但由于它的统计功能和测试的准确性,Excel一直(尽管程度较小)仍然受到批评。如此之多以至于“朋友不让朋友使用Excel进行统计”在统计学家中是一个相对著名的说法。有关讨论,请参见this。诸如POISSON.DIST之类的虚线统计函数是专门为解决堆积如山的许多投诉而设计的。 POISSON本身只是为了向后兼容而保留。奇怪的是,这个错误是如何从头开始彻底重写这些功能的。