-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
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 Differences in results between dqrng::dqrunif() and dqrng::uniform_distribution dist(min, max); #77.
- It does not work well with classes that are derived from
random_64bit_generator, c.f. Bug: Compile-time and runtime-polymorphism do not work together #65
At the moment I see three possibilities:
- Vendor in the distribution functions from
boost.randomand remove the general behavior in favor of code making use of the richer interface ofrandom_64bit_generator. License wise this is fine according to https://www.gnu.org/licenses/license-list.en.html#boost. - Go for a function interface
normal(rng, n, mean, sd)etc., similar to the already functionalsample()interface. - Extend
random_64bit_generatorfurther with methodsnormal(mean, sd)etc. In this case it would make sense to move the implementation of these methods into separate*.ippfiles 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).
Metadata
Metadata
Assignees
Labels
No labels