SPB Git

spb/wp40_uqo

Public MIT
1.5 KB · 31 lines cpp
1// Rolling / expanding window statistics (CPU FP64 reference).2// Implementation detail: running sums use Neumaier compensation AND a periodic exact re-summation of the window3// (every `resum_every` steps) so that drift cannot accumulate over 390 000-bar series.4#pragma once5#include <span>6#include <vector>7#include <limits>8#include "raid/core/types.hpp"910namespace raid::stats {1112constexpr f64 kNaN = std::numeric_limits<f64>::quiet_NaN();1314struct RollingOptions {15  usize window{22};16  usize min_periods{0};        // 0 = window (full windows only); otherwise partial windows allowed at the start17  usize resum_every{1024};     // exact re-summation cadence18};1920std::vector<f64> rolling_sum(std::span<const f64> x, const RollingOptions& o);21std::vector<f64> rolling_mean(std::span<const f64> x, const RollingOptions& o);22std::vector<f64> rolling_variance(std::span<const f64> x, const RollingOptions& o, int ddof = 1);23std::vector<f64> rolling_covariance(std::span<const f64> x, std::span<const f64> y, const RollingOptions& o, int ddof = 1);24std::vector<f64> rolling_correlation(std::span<const f64> x, std::span<const f64> y, const RollingOptions& o);25std::vector<f64> expanding_mean(std::span<const f64> x, usize min_periods = 1);26std::vector<f64> expanding_variance(std::span<const f64> x, usize min_periods = 2, int ddof = 1);27/// Causal lag (positive k) or lead (negative k); NaN where undefined.28std::vector<f64> shift(std::span<const f64> x, long k);2930}  // namespace raid::stats31
Files · a9731b7fb3254b6175c7c579307f61336c22d6c8
Menu

Theme