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