27 auto [sw, sx, sxx] = state;
28 return load_state(sw, sx, sxx);
31 inline void operator()(T x)
noexcept
33 T dx = sum_w * x - sum_x;
36 sum_xx += dx * dx / (sum_w * sum_w_old);
40 inline void operator()(T x, T w)
noexcept
43 T dx = sum_w * x - sum_x * w;
46 sum_xx += dx * dx / (w * sum_w * sum_w_old);
51 requires eve::simd_value<T> && eve::simd_compatible_ptr<U, T>
52 inline void operator()(U
const* x)
noexcept
58 requires eve::simd_value<T> && eve::simd_compatible_ptr<U, T>
59 inline void operator()(U
const* x, U
const* w)
noexcept
65 [[nodiscard]]
auto stats()
const noexcept -> std::tuple<double, double, double>
67 if constexpr (std::is_floating_point_v<T>) {
68 return { sum_w, sum_x, sum_xx };
70 return { eve::reduce(sum_w), eve::reduce(sum_x), combine(sum_w, sum_x, sum_xx) };