| 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 | 278 | Real realUniform() { return uniformReal(engine); } | |
| 18 | |||
| 19 | 90 | int intUniform(const int a, const int b) { | |
| 20 | 90 | return uniformInt(engine, typename decltype(uniformInt)::param_type(a, b)); | |
| 21 | } | ||
| 22 | |||
| 23 | 20 | Vec vecUniform(const Vec &L) { | |
| 24 | 80 | return Vec::NullaryExpr([&]() { return uniformReal(engine); }).array() * L.array(); | |
| 25 | } | ||
| 26 | |||
| 27 | 9436 | Vec vecNormal() { | |
| 28 | 37744 | return Vec::NullaryExpr([&]() { return normalReal(engine); }); | |
| 29 | } | ||
| 30 | |||
| 31 | 84 | Vec vecNormal(const Real stddev) { return vecNormal() * sqrt(stddev); } | |
| 32 | |||
| 33 | 4688 | Vec vecNormal(const Vec &mean, const Real stddev) { return vecNormal() * sqrt(stddev) + mean; } | |
| 34 | }; | ||
| 35 |