#pragma once #include "random/engine.h" #include //#include #include "utils/matrix.h" #include "utils/vector.h" namespace rng::detail { // // Base functions int // template typename std::enable_if::value, T>::type normal_serial(const T mean, const T stddev) { std::normal_distribution dist(mean, stddev); return dist(rng::engine()); } // // Base functions float // template typename std::enable_if::value, T>::type normal_serial(const T mean, const T stddev) { std::normal_distribution dist(mean, stddev); return dist(rng::engine()); } template utils::Vector normal_serial(const uint64_t size, const T mean, const T stddev){ utils::Vector v(size); for (uint64_t i = 0; i < size; ++i){ v[i] = normal_serial(mean, stddev); } return v; } template utils::Matrix normal_serial(const uint64_t rows, const uint64_t cols, const T mean, const T stddev){ utils::Matrix A(rows, cols); for (uint64_t i = 0; i < rows; ++i){ for (uint64_t j = 0; j < cols; ++j){ A(i,j) = normal_serial(mean, stddev); } } return A; } }