diff --git a/include/vsmc/rng/counter.hpp b/include/vsmc/rng/counter.hpp index 66819522d..7f26b96d7 100644 --- a/include/vsmc/rng/counter.hpp +++ b/include/vsmc/rng/counter.hpp @@ -362,6 +362,12 @@ class CounterEngine return; } + std::memcpy( + r, buffer_.data() + index_, sizeof(result_type) * (M_ - index_)); + r += M_ - index_; + n -= M_ - index_; + index_ = M_; + const std::size_t k = 1024 / M_; if (k != 0) { const std::size_t m = (n / M_) / k; diff --git a/include/vsmc/rng/u01_distribution.hpp b/include/vsmc/rng/u01_distribution.hpp index c7cf07495..6c1779441 100644 --- a/include/vsmc/rng/u01_distribution.hpp +++ b/include/vsmc/rng/u01_distribution.hpp @@ -107,8 +107,8 @@ inline void u01_distribution(RNGType &rng, std::size_t n, RealType *r) const std::size_t m = n / k; const std::size_t l = n % k; for (std::size_t i = 0; i != m; ++i, r += k) - internal::u01_distribution_impl(rng, k, r); - internal::u01_distribution_impl(rng, l, r); + internal::u01_distribution_impl(rng, k, r); + internal::u01_distribution_impl(rng, l, r); } VSMC_DEFINE_RNG_DISTRIBUTION_RAND_0(U01, u01, RealType)