[
https://issues.apache.org/jira/browse/MATH-1056?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13818061#comment-13818061
]
Thomas Neidhart commented on MATH-1056:
---------------------------------------
But lambdaFractional is always in the range [0, 1) thus your recursive call
will just once the other part of the conditional.
nextPoisson(mean) is only called from the sample method, and we could make a
nextPoisson() method that decides to call either nextPoissonSmallMean or
LargeMean depending on the actual mean value. nextPoissonLargeMean itself calls
SmallMean for the fractional part.
> Small error in PoissonDistribution.nextPoisson() algorithm
> ----------------------------------------------------------
>
> Key: MATH-1056
> URL: https://issues.apache.org/jira/browse/MATH-1056
> Project: Commons Math
> Issue Type: Bug
> Affects Versions: 3.2
> Reporter: Sean Owen
> Priority: Minor
> Fix For: 3.3
>
> Attachments: MATH-1056.patch
>
>
> Here's a tiny bug I noticed via static inspection, since it flagged the
> integer division. PoissonDistribution.java:325 says:
> {code:java}
> final double a1 = FastMath.sqrt(FastMath.PI * twolpd) * FastMath.exp(1 / 8 *
> lambda);
> {code}
> The "1 / 8 * lambda" is evidently incorrect, since this will always evaluate
> to 0. I rechecked the original algorithm
> (http://luc.devroye.org/devroye-poisson.pdf) and it should instead be:
> {code:java}
> final double a1 = FastMath.sqrt(FastMath.PI * twolpd) * FastMath.exp(1 / (8 *
> lambda));
> {code}
> (lambda is a double so there is no int division issue.) This matches a later
> expression.
> I'm not sure how to evaluate the effect of the bug. Better to be correct of
> course; it may never have made much practical difference.
--
This message was sent by Atlassian JIRA
(v6.1#6144)