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

小数后第5位结果不符求助:C语言滑动窗口求最大平均

问题根源

核心问题是float类型的精度不足:float仅能提供约6-7位十进制有效数字,当数组元素累加后的总和数值较大时,小数部分的精度会被覆盖,最终导致计算出的平均值出现偏差。你遇到的558.29498与预期558.29496的差异,就是因为float在存储大总和时,无法精确保留足够的小数位。

你之前仅在返回时强制转double,但求和过程已经用float完成,精度损失早已经发生,所以改返回值类型没用。

修复方案

把存储总和的变量全部换成double类型,让整个计算过程都用更高精度的类型处理:

double findMaxAverage(int* nums, int numsSize, int k){
    double maxSum = -2147483648.0;
    double currentSum = 0.0;

    for(int i=0; i < numsSize; i++){
        currentSum += nums[i];
        if(i >= k - 1){
            if(currentSum > maxSum) maxSum = currentSum;
            currentSum -= nums[i - (k - 1)];
        }
    }
    return maxSum/k;
}
额外说明
  • double类型有15-17位十进制有效数字,足以应对绝大多数场景下的累加精度需求,能彻底避免大数值累加时的精度丢失问题。
  • 初始化maxSum时写-2147483648.0是为了明确是浮点型赋值,避免整数转浮点时的潜在问题,也符合double类型的初始化规范。

内容的提问来源于stack exchange,提问作者Aryant Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:55:10