#pragma once #include "random/engine.h" #include //#include #include "utils/matrix.h" #include "utils/vector.h" namespace rng::detail { template inline T binomial_serial(const uint64_t trials, const double probability) { std::binomial_distribution dist(trials, probability); return static_cast(dist(rng::engine())); } template utils::Vector binomial_serial(const uint64_t size, const uint64_t trials, const double probability){ utils::Vector v(size); for (uint64_t i = 0; i < size; ++i){ v[i] = binomial_serial(trials, probability); } return v; } template utils::Matrix binomial_serial(const uint64_t rows, const uint64_t cols, const uint64_t trials, const double probability){ utils::Matrix A(rows, cols); for (uint64_t i = 0; i < rows; ++i){ for (uint64_t j = 0; j < cols; ++j){ A(i,j) = binomial_serial(trials, probability); } } return A; } }