[ 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)