为什么POISSON功能在Microsoft Excel中不一致?

问题描述 投票:3回答:1

POISSON函数中有一个定义:

#NUM!错误 - 如果出现以下情况,则会发生:

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

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

=POISSON(0,-0.5,FALSE)

结果是:1.648721271而不是#NUM!

有什么想法吗?

excel vba excel-formula excel-2013
1个回答
1
投票

推测性地,这个bug可能是一个优化。 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时,为什么还要费心去计算?

令我惊讶的是,这个bug仍然存在于POISSON.DIST Excel已经(并且仍然是,虽然在较小程度上)严重批评其统计功能和测试的准确性。因此,“朋友们不要让朋友使用Excel进行统计”这一点在统计学家中是一个比较着名的说法。请参阅this进行讨论。像POISSON.DIST这样的虚线统计函数被明确地设计用于解决许多抱怨的问题。 POISSON本身就是为了向后兼容而保持不变。奇怪的是,这个错误是如何彻底改写从头开始彻底重写这些功能的。

© www.soinside.com 2019 - 2024. All rights reserved.