dqrng icon indicating copy to clipboard operation
dqrng copied to clipboard

Rethink distribution functions

Open rstub opened this issue 1 year ago • 0 comments

At the moment I am using distribution functions from boost.random and add some template specialization to the 64bit RNGs provided here. This works well in principle, but has some disadvantages:

  • It is not easy to understand when these specializations are active, see e.g. the discussion in #77.
  • It does not work well with classes that are derived from random_64bit_generator, c.f. #65

At the moment I see three possibilities:

  1. Vendor in the distribution functions from boost.random and remove the general behavior in favor of code making use of the richer interface of random_64bit_generator. License wise this is fine according to https://www.gnu.org/licenses/license-list.en.html#boost.
  2. Go for a function interface normal(rng, n, mean, sd) etc., similar to the already functional sample() interface.
  3. Extend random_64bit_generator further with methods normal(mean, sd) etc. In this case it would make sense to move the implementation of these methods into separate *.ipp files included after the class declaration. Due to the large tables for the Ziggurat method, this would increase the RNG objects size quite a bit.

All three approaches would allow implementing the Ziggurat variant from https://github.com/cd-mcfarland/fast_prng and MT2001 for Gamma (c.f. #22).

rstub avatar Apr 27 '24 15:04 rstub