From 033d377a30b07cd94515f5f9ff847554ca58dc2a Mon Sep 17 00:00:00 2001 From: Wouter Deconinck Date: Sun, 31 Dec 2023 17:26:01 -0600 Subject: [PATCH] fix: add default parameters to random distributions (requires C++20) This adds constraints for integral and floating point types to make sure that default parameter values are well-defined. Instead of `gaussian(0.,1.)`, we can now also use `gaussian()` with the same effect. This reduces the need to specify constants where they can be easily swapped, e.g. mu and sigma. --- core/include/algorithms/random.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/include/algorithms/random.h b/core/include/algorithms/random.h index 1c7d112..bc588dc 100644 --- a/core/include/algorithms/random.h +++ b/core/include/algorithms/random.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -26,27 +27,27 @@ class Generator { public: Generator(const RandomEngineCB& gen, const size_t cache_size) : m_gen{gen, cache_size} {} - template Int uniform_int(const Int min, const Int max) const { + template Int uniform_int(const Int min = 0, const Int max = 1) const { std::uniform_int_distribution d{min, max}; std::lock_guard lock{m_mutex}; return d(m_gen); } - template Float uniform_double(const Float min, const Float max) const { + template Float uniform_double(const Float min = 0, const Float max = 1) const { std::uniform_real_distribution d{min, max}; std::lock_guard lock{m_mutex}; return d(m_gen); } - template Int poisson(const Int mean) const { + template Int poisson(const Int mean = 1) const { std::poisson_distribution d{mean}; std::lock_guard lock{m_mutex}; return d(m_gen); } - template Float exponential(const Float lambda) const { + template Float exponential(const Float lambda = 1) const { std::exponential_distribution d{lambda}; std::lock_guard lock{m_mutex}; return d(m_gen); } - template Float gaussian(const Float mu, const Float sigma) const { + template Float gaussian(const Float mu = 0, const Float sigma = 1) const { std::normal_distribution d{mu, sigma}; std::lock_guard lock{m_mutex}; return d(m_gen);