You need to enable JavaScript to run this app. C语言灰度滤镜程序无法通过非整数平均像素及复杂图像测试用例
优惠活动
大模型
产品
解决方案
定价
更多

C语言灰度滤镜程序无法通过非整数平均像素及复杂图像测试用例

错误根源

代码存在典型的C语言整数除法精度丢失问题:

  • 三个通道的色值red/blue/green都是整型变量,三者求和的结果同样是整型
  • 用整型总和除以整数3时,C语言会自动执行整数除法,直接截断小数点后的所有内容,不会保留任何小数精度
  • 对应测试报错的非整数平均单像素场景:假设三通道总和为83,原逻辑下83 / 3的计算结果直接被截断为27,后续把这个已经被截断的整数传入round()函数,得到的结果依然是27,完全达不到27.67四舍五入为28的预期效果

测试中复杂3x3、4x4图像的期望和实际输出开头看起来一致,是因为首个像素刚好是整数平均的场景,计算结果正确;后续的非整数平均像素因整数除法截断出现偏差,最终导致测试判定不通过。

修复方案

只需要让除法运算基于浮点数执行,保留完整的小数精度后再做四舍五入,修改核心计算行即可:

// 将除数从整数3替换为浮点数3.0,触发全链路浮点运算
int avr = round((red + blue + green) / 3.0);

替换后的效果:

  • 整数形式的色值总和会被自动转换为浮点数参与除法运算,能完整保留平均值的小数部分
  • round()接收到的是真实的带小数的平均色值,四舍五入的结果会和所有测试用例的预期完全匹配
  • 单像素非整数平均、复杂3x3图像、4x4图像的所有测试报错,都会随这个改动同步修复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 08:57:04