You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中计算等权重累积平均值?是否为移动平均?

问题解答

一、是否属于移动平均的说明

这种从首个样本开始到请求时刻的累积等权重平均值不是移动平均(moving average)。移动平均的核心是基于滑动窗口或固定数量的最新样本计算(比如取最近10个样本的平均值),新样本到来时会丢弃旧样本;而你描述的计算方式保留所有历史样本,计算的是全局累积平均,二者逻辑完全不同。

二、C语言实现方案

通过维护两个静态变量就能高效实现,避免每次请求时重新遍历所有样本:

  • sum:存储所有样本的累加和
  • count:存储样本的总数量

每次新样本到来时更新这两个变量,请求平均值时直接用总和除以样本数即可。

代码示例

#include <stdio.h>

// 静态变量仅在当前文件内可见,用于维护累积统计数据
static double sum = 0.0;
static unsigned int count = 0;

// 新增样本的函数
void add_sample(double sample) {
    sum += sample;
    count++;
}

// 获取累积平均值的函数
double get_cumulative_average() {
    if (count == 0) {
        printf("Error: No samples available.\n");
        return 0.0; // 无样本时返回默认值,可按需调整
    }
    return sum / count;
}

// 测试示例
int main() {
    add_sample(10.0);
    add_sample(20.0);
    add_sample(30.0);
    
    printf("Cumulative average: %.2f\n", get_cumulative_average()); // 输出20.00
    
    add_sample(40.0);
    printf("Cumulative average after new sample: %.2f\n", get_cumulative_average()); // 输出25.00
    
    return 0;
}

注意事项

  • 若样本数量极大,sum可能出现精度溢出,可根据样本数值范围选择long double等更合适的数据类型。
  • 若需线程安全,要为add_sample和get_cumulative_average添加互斥锁(比如使用pthread_mutex_t)。

内容的提问来源于stack exchange,提问作者ga as

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:50:25