A new version of
dqrng has made it onto the CRAN servers. This version brings two breaking changes, hence the “larger than usual” change in version number:
- An integer vector instead of a single
intis used for seeding (Aaron Lun in #10)
- Single integer seeds lead to a different RNG state than before.
Rcpp::IntegerVectorinstead of an
- Support for Mersenne-Twister has been removed, Xoroshiro128+ is now the default.
The first change is motivated by the desire to provide more than 32 bits of randomness as seed to the RNG. With this possibility in place, the previously used scrambling of the single 32 bit integer did not make much sense anymore and was therefore removed. The new method
generateSeedVectors() for generating a list of random
int vectors from R’s RNG can be used to generate such seed vector.
The second change is related to a statement in R’s manual: Nor should the C++11 random number library be used …. I think that relates to the implementation-defined distributions and not the generators, but in general one should follow WRE by the letter. So
std::mt19937_64 has to go, and unfortunately it cannot be replaced by
boost::random::mt19937_64 due to a not-merged pull request. Instead of shipping a fixed version of MT I opted for removal since:
- MT is known to fail certain statistical tests.
- MT is slower than the other generators.
- MT was the only generator that does not support multiple streams of random numbers necessary for parallel operations.
The other usage of
random from C++11 was the default initialization, which used
std::random_device. This is now unnecessary since the initial state of the default RNG is now based on R’s RNG, using the techniques developed for