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); }