Uploaded image for project: 'Commons Math'
  1. Commons Math
  2. MATH-294

RandomDataImpl.nextPoisson fails for means in range 6.0 - 19.99

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.2, 2.0
    • Fix Version/s: 2.1
    • Labels:
      None
    • Environment:

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

        Attachments

        1. math-294.patch
          2 kB
          Luc Maisonobe

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              mcfall Jason McFall
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: