Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.2, 2.0
-
None
-
None
-
Java 1.6 on mac osX
Description
math.random.RandomDataImpl.nextPoisson(double mean) fails frequently (but not always) for values of mean between 6.0 and 19.99 inclusive. For values below 6.0 (where I see there is a branch in the logic) and above 20.0 it seems to be okay (though I've only randomly sampled the space and run a million trials for the values I've tried)
When it fails, the exception is as follows (this for a mean of 6.0)
org.apache.commons.math.MathRuntimeException$4: must have n >= 0 for n!, got n = -2
at org.apache.commons.math.MathRuntimeException.createIllegalArgumentException(MathRuntimeException.java:282)
at org.apache.commons.math.util.MathUtils.factorialLog(MathUtils.java:561)
at org.apache.commons.math.random.RandomDataImpl.nextPoisson(RandomDataImpl.java:434)
ie MathUtils.factorialLog is being called with a negative input
To reproduce:
JDKRandomGenerator random = new JDKRandomGenerator();
random.setSeed(123456);
RandomData randomData = new RandomDataImpl(random);
for (int i=0; i< 1000000; i++)
{ randomData.nextPoisson(6.0); }