Le dim. 1 août 2021 à 19:24, Alex Herbert <alex.d.herb...@gmail.com> a écrit :
>
> Some of the distributions precompute values to be used in the probability
> computations, others do not.
>
> IMO if you are using a distribution it is likely that you will call one of
> the probability functions many times. Which one is unknown. Options are:
>
> 1. Precompute all values that can be precomputed for each probability
> computation. Some values will not be necessary depending on the use case.
> 2. Precompute nothing. This will repeat computations for each call to the
> relevant method. In the case of inverse CDF computations solved by search
> of the CDF this can be expensive.
> 3. Dynamically compute the values on the first call.
>
> Option 3 is possible without synchronization using a pattern:
>
> double value = Double.NaN;
>
> double getValue() {
>     double v = value;
>     if (Double.isNaN(v)) {
>         value = v = computeValue();
>     }
>     return v;
> }
>
> This adds a lot of complexity to the classes.
>
> I would opt for option 1 in order to optimise the distribution in use and
> take the performance hit in the constructor.

+1
Simpler and more robust code (through immutability).

Gilles

> In the assumed use case of
> multiple invocations of a probability method then the precomputation of
> values for all probability methods will likely still be an optimisation for
> the single method of interest invoked multiple times.
>
> In the use case of creating a distribution to create a sampler, the
> generation of random deviates will likely take far longer than any
> performance hit for unnecessary precomputations.
>
> Alex

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to