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

RandomDataImpl.nextPoisson fails for means in range 6.0 - 19.99

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.2, 2.0
    • 2.1
    • 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); }

      Attachments

        1. math-294.patch
          2 kB
          Luc Maisonobe

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: