[ https://issues.apache.org/jira/browse/MATH-1056?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13812501#comment-13812501 ]
Phil Steitz commented on MATH-1056: ----------------------------------- Good catch, Sean! I played a little with this today to see if fixing it allowed me to increase sensitivity in the nextPossionConsistency test in RandomDataGeneratorTest. I did not succeed, which is unfortunate as this definitely looks like a bug. I am +1 for committing the patch, but would really like to get a test that fails before and succeeds after. The nextPossionConsistency test is a ChiSquare-based test that looks at the binned distribution of values generated by nextPoission (which is now implemented in the distribution class itself). When the test was developed, we had not yet implemented the G test, which may work better for homogeneity testing in this kind of setting. It might be interesting to experiment with G tests to get a pre/post fail/fix here. Another thing to dig into is exactly what generated values for what means will be materially impacted by the bug. That might allow us to set up a specific G or Chi-square test that will consistently fail. > 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 > 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)