-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
Problem
Some of boost's internal functions are fully specialized for dqrng::random_64bit_generator; see below. However, this specialization works for dqrng::random_64bit_generator only and not for any of its derived classes. See also https://stackoverflow.com/a/27988380.
dqrng/inst/include/dqrng_distribution.h
Lines 41 to 63 in f3a8002
| namespace boost { | |
| namespace random { | |
| namespace detail { | |
| template<> | |
| inline std::pair<double, int> generate_int_float_pair<double, 8, dqrng::random_64bit_generator>(dqrng::random_64bit_generator& eng) | |
| { | |
| dqrng::random_64bit_generator::result_type x = eng(); | |
| double r = dqrng::uniform01(x); | |
| // shift x due to weakness of lowest bits for xoshiro/xoroshiro with used "+" scrambler | |
| int bucket = (x >> 3) & 0xFF; | |
| return std::make_pair(r, bucket); | |
| } | |
| template<> | |
| inline double generate_uniform_real<dqrng::random_64bit_generator, double>(dqrng::random_64bit_generator& eng, double min, double max) | |
| { | |
| return dqrng::uniform01(eng()) * (max - min) + min; | |
| } | |
| } // namespace detail | |
| } // namespace random | |
| } // namespace boost |
Possible solutions
I do not know if there is a natural fix as the original template definitions are part of the boost headers. Other than that, either all derived classes of dqrng::random_64bit_generator should have the same specialization or only dereferenced pointer-to-dqrng::random_64bit_generator should be passed into any distribution.
jwood000 and rstub
Metadata
Metadata
Assignees
Labels
No labels