28 std::uint64_t entropy = 0;
30 std::random_device device;
31 entropy = (
static_cast<std::uint64_t
>(device()) << 32) ^ device();
32 }
catch (
const std::exception &) {
34 entropy ^=
static_cast<std::uint64_t
>(std::chrono::high_resolution_clock::now().time_since_epoch().count());
35 entropy ^=
static_cast<std::uint64_t
>(std::hash<std::thread::id>()(std::this_thread::get_id())) << 1;
43template <
class Engine = DefaultEngine>
46 return Engine(sequence);
56template <
class Engine = DefaultEngine>
57std::vector<Engine>
make_streams(std::uint64_t seed, std::size_t count)
59 std::vector<Engine> streams;
60 streams.reserve(count);
61 if constexpr (
requires(Engine e) { e.jump(); }) {
63 for (std::size_t i = 0; i < count; ++i) {
64 streams.push_back(engine);
67 }
else if constexpr (std::constructible_from<Engine, std::uint64_t, std::uint64_t>) {
68 for (std::size_t i = 0; i < count; ++i)
69 streams.emplace_back(seed,
static_cast<std::uint64_t
>(i));
72 for (std::size_t i = 0; i < count; ++i)
73 streams.emplace_back(
static_cast<typename Engine::result_type
>(seeds()));
The SplitMix64 class Sebastiano Vigna's SplitMix64 generator.
Definition splitmix64.hpp:14
The Xoshiro256pp class xoshiro256++ 1.0 by David Blackman and Sebastiano Vigna: 256 bits of state,...
Definition xoshiro.hpp:20
Definition bivariate_normal.hpp:10
std::vector< Engine > make_streams(std::uint64_t seed, std::size_t count)
Engines for parallel simulations, one per thread: consecutive jump() calls for engines that have them...
Definition seeding.hpp:57
std::uint64_t random_seed()
Definition seeding.hpp:26
Engine seed_from(std::seed_seq &sequence)
Definition seeding.hpp:44