计算3个整数的十进制平均值得到错误结果的原因排查
代码错误说明
你的代码存在两处会导致计算结果错误的问题:
- 运算符优先级不符合预期:C类语法中,除法运算符
/的优先级高于加法运算符+,你写的number1+number2+number3 / 3实际执行逻辑是先计算number3 / 3,再将结果与number1、number2相加,完全不是「三个数求和后除以3」的计算逻辑。 - 整数除法截断误差:即便你修正了运算顺序给求和部分加上括号,如果直接用三个int类型的和除以整数常量3,整数运算规则会直接舍弃小数部分、仅保留整数商,最后赋值给float类型时也无法找回丢失的小数位,得不到精确的十进制小数结果。
正确写法
需要先通过括号明确运算优先级,再将除法的任意一侧操作数转为浮点类型,触发浮点除法运算保留小数位:
float average = (number1 + number2 + number3) / 3.0f;
举个测试用例对照:如果三个变量值分别为1、2、2,原代码的计算结果为1 + 2 + (2/3) = 3.0,而正确的平均值应为约1.6667,偏差非常明显。
内容的提问来源于stack exchange,提问作者Mohamed Nasr
相关产品推荐
相关产品推荐

