From 3aab15a0a099d39408ce55a78b46977ec8f21ef6 Mon Sep 17 00:00:00 2001 From: Al Date: Sun, 2 Apr 2017 23:29:15 -0400 Subject: [PATCH] [math] adding mean, variance and standard deviation to generic vector functions --- src/vector_math.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/vector_math.h b/src/vector_math.h index b724b03b..3c964581 100644 --- a/src/vector_math.h +++ b/src/vector_math.h @@ -210,6 +210,26 @@ return result; \ } \ \ + static inline double name##_mean(type *array, size_t n) { \ + unsigned_type sum = name##_sum(array, n); \ + return (double)sum / n; \ + } \ + \ + static inline double name##_var(type *array, size_t n) { \ + double mu = name##_mean(array, n); \ + double sigma2 = 0.0; \ + for (size_t i = 0; i < n; i++) { \ + double dev = (double)array[i] - mu; \ + sigma2 += dev * dev; \ + } \ + return sigma2 / n; \ + } \ + \ + static inline double name##_std(type *array, size_t n) { \ + double sigma2 = name##_var(array, n); \ + return sqrt(sigma2); \ + } \ + \ static inline type name##_product(type *array, size_t n) { \ type result = 0; \ for (size_t i = 0; i < n; i++) { \