[
https://issues.apache.org/jira/browse/MATH-1056?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13817864#comment-13817864
]
Phil Steitz commented on MATH-1056:
-----------------------------------
Forgot to respond to Thomas' observation about repeat computations. The
problem is that the actual parameter to nextPoisson can't be eliminated, i.e.,
it is not always the mean. nextPoisson is (conditionally) called recursively by
itself when computing y2 with actual parameter lambdaFractional. That means
all of the variables set at the beginning need to be recomputed in that case.
I guess we could test the actual parameter value against the mean and used
cached values in that case, but that would make the code a little harder to
follow.
> 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)