Line | Branch | Exec | Source |
---|---|---|---|
1 | #pragma once | ||
2 | |||
3 | #include <pcg_random.hpp> | ||
4 | #include <random> | ||
5 | |||
6 | #include "types.hpp" | ||
7 | |||
8 | class RNG { | ||
9 | public: | ||
10 | pcg64 engine; | ||
11 | std::uniform_real_distribution<Real> uniformReal; | ||
12 | std::uniform_int_distribution<int> uniformInt; | ||
13 | std::normal_distribution<Real> normalReal; | ||
14 | |||
15 |
1/2✓ Branch 2 taken 60 times.
✗ Branch 3 not taken.
|
120 | RNG() : engine(pcg_extras::seed_seq_from<std::random_device>()) {} |
16 | |||
17 | 286 | Real realUniform() { return uniformReal(engine); } | |
18 | |||
19 | 81 | int intUniform(const int a, const int b) { | |
20 | 81 | return uniformInt(engine, typename decltype(uniformInt)::param_type(a, b)); | |
21 | } | ||
22 | |||
23 | 29 | Vec vecUniform(const Vec &L) { | |
24 | 116 | return Vec::NullaryExpr([&]() { return uniformReal(engine); }).array() * L.array(); | |
25 | } | ||
26 | |||
27 | 8252 | Vec vecNormal() { | |
28 | 33008 | return Vec::NullaryExpr([&]() { return normalReal(engine); }); | |
29 | } | ||
30 | |||
31 | 84 | Vec vecNormal(const Real stddev) { return vecNormal() * sqrt(stddev); } | |
32 | |||
33 | 4100 | Vec vecNormal(const Vec &mean, const Real stddev) { return vecNormal() * sqrt(stddev) + mean; } | |
34 | }; | ||
35 |