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.
|
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.
Problem
Some of boost's internal functions are fully specialized for
dqrng::random_64bit_generator; see below. However, this specialization works fordqrng::random_64bit_generatoronly 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
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_generatorshould have the same specialization or only dereferenced pointer-to-dqrng::random_64bit_generatorshould be passed into any distribution.