Предположительно, ошибка могла возникнуть как оптимизация.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)
всегда оценивается точно в 0, когда A1,A2
находится в правильном домене (а не, например, 0,0000000001, как в случае, если при расчете использовался другой подход),Кроме того, EXP(-A2)*EXP(A1*LN(A2))/FACT(A1)
терпит неудачу, когда он должен потерпеть неудачу, давая #NUM!
при подаче 0, -0.5
.Мое предположение состоит в том, что программисты Excel изначально использовали формулу, которая потерпела неудачу, когда она должна была потерпеть неудачу, позволяя вызываемым функциям вызывать ошибку, когда это необходимо.Тогда у кого-то появилась блестящая идея просто вернуть EXP(-mean)
, когда x = 0
(поскольку в этом случае остальная часть выражения равна 1 , когда оно вообще определено ).В конце концов - зачем пытаться что-то вычислить, когда вы знаете, что это 1?
Что меня удивляет, так это то, что ошибка все еще существует, когда POISSON.DIST
Excel был (и остается, хотя и в меньшей степени).степень) сильно критиковали за точность своих статистических функций и тестов.Настолько, что «Друзья не позволяют друзьям использовать Excel для статистики» - это довольно известное высказывание среди статистиков.См. this для обсуждения.Пунктирные статистические функции, такие как POISSON.DIST
, были специально разработаны для рассмотрения множества накопившихся жалоб.POISSON
просто хранится для обратной совместимости.Странно, как эта ошибка просочилась через то, что должно было быть полностью переписано этими функциями с нуля.