#pragma once #include namespace fn::ds { // Estadistica descriptiva pura sobre arrays de double. // Todas las funciones aceptan ptr + n; n=0 devuelve identidades sensatas. double stats_sum (const double* data, std::size_t n); double stats_mean (const double* data, std::size_t n); double stats_min (const double* data, std::size_t n); double stats_max (const double* data, std::size_t n); // Welford one-pass (numericamente estable). Variance muestral si sample=true // (denominador n-1), poblacional si sample=false (denominador n). double stats_variance(const double* data, std::size_t n, bool sample = true); double stats_std (const double* data, std::size_t n, bool sample = true); // Quantile lineal (R type-7). p en [0, 1]. NO modifica data — internamente // hace copia + sort. Para multiples quantiles del mismo dataset, ordenar // una vez con stats_sort y usar stats_quantile_sorted. double stats_quantile(const double* data, std::size_t n, double p); // Variante para dataset ya ordenado ascendente. double stats_quantile_sorted(const double* sorted, std::size_t n, double p); // Percentile = quantile(p/100). double stats_percentile(const double* data, std::size_t n, double pct); // Helper: ordena ascendente in-place a un buffer destino dado. // out debe tener al menos n elementos. Si out == data, ordena in-place. void stats_sort(const double* data, std::size_t n, double* out); } // namespace fn::ds