33#include <Random123/philox.h>
74template <RNGSalt salt>
79 using key_type = rng_type::key_type;
110template <RNGSalt salt, std::
size_t N = 3>
111 requires((
N >= 1)
and (
N <= 4))
115 std::ranges::transform(
integers | std::ranges::views::take(
N),
noise.begin(),
116 [](std::size_t v) { return Utils::uniform(v) - 0.5; });
139template <RNGSalt salt, std::
size_t N = 3>
140 requires((
N >= 1)
and (
N <= 4))
145 constexpr std::size_t
M = (
N <= 2) ? 2 : 4;
147 std::ranges::transform(
148 integers | std::ranges::views::take(
M),
u.begin(), [](std::size_t value) {
149 auto constexpr epsilon = std::numeric_limits<double>::min();
150 auto res = Utils::uniform(value);
151 return (res < epsilon) ? epsilon : res;
160 auto const modulo = std::sqrt(-2. * std::log(
u[0]));
161 auto const angle = 2. * std::numbers::pi *
u[1];
168 auto const modulo = std::sqrt(-2. *
log(
u[2]));
169 auto const angle = 2. * std::numbers::pi *
u[3];
185template <
typename T> std::mt19937
mt19937(T &&seed) {
Vector implementation and trait types for boost qvm interoperability.
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
auto noise_gaussian(uint64_t counter, uint32_t seed, int key1, int key2=0)
Generator for Gaussian noise.
auto philox_4_uint64s(uint64_t counter, uint32_t seed, int key1, int key2=0)
get 4 random uint 64 from the Philox RNG
auto noise_uniform(uint64_t counter, uint32_t seed, int key1, int key2=0)
Generator for random uniform noise.
std::mt19937 mt19937(T &&seed)
Mersenne Twister with warmup.
constexpr uint64_t u32_to_u64(uint32_t high, uint32_t low)
@ THERMAL_STONER_WOHLFARTH