Gilles created MATH-1338:
----------------------------

             Summary: Does "EmpiricalDistribution" use "RandomDataGenerator"?
                 Key: MATH-1338
                 URL: https://issues.apache.org/jira/browse/MATH-1338
             Project: Commons Math
          Issue Type: Bug
            Reporter: Gilles
            Priority: Blocker
             Fix For: 4.0


The class {{EmpiricalDistribution}} (in package "o.a.c.m.random") holds an 
instance field ("randomData") of type {{RandomDataGenerator}}.
The documentation of this field indicates that it is only used for sampling, 
and indeed the field is only accessed in order to fetch the RNG object stored 
in it. 
It is unclear why {{RandomDataGenerator}} was needed to hold a RNG since the 
same RNG could have been (in the current design) readily available in the base 
class.

Sampling is performed in method {{getNextValue()}} (which in turn calls 
{{sample()}} in the parent class).
{{getNextValue()}} performs a precondition check before calling {{sample()}} 
and raises a CM specific {{MathIllegalStateException}}; but the inherited 
{{sample()}} method can be still called directly on the instance, and in that 
case, if the (same) condition is not fulfilled, a standard 
{{NullPointerException}} will be thrown instead.

In line with MATH-1158, the sampling functionality should be accessed through 
the {{RealDistribution.Sampler}} interface, and {{getNextValue()}} is to be 
removed as it duplicates the common API (i.e. the {{sample()}} method).

Since the RNG is then passed to the {{createSampler}} factory method, the 
"randomData" field becomes obsolete.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to