使用整数的3个数字的平均值

时间:2012-08-10 11:55:54

标签: math floating-point integer average

我想计算三个数字的平均值,例如:

d = int(round((a + b + c) / 3.0))

abcd为整数。

是否可以仅使用整数得到相同的结果?

我对此感兴趣是因为性能原因,我假设使用整数进行数学计算应该比使用浮点数更快。

上面的示例将整数转换为浮点数,计算结果,对其进行舍入并转换回整数。是否可以避免int< - >浮动转换?

4 个答案:

答案 0 :(得分:9)

鉴于对1,1,2的要求 - > 1; 1,2,2 - > 2然后可以使用整数除法来完成。

使用//表示整数除法,n表示元素数。

average = ( a+ b + c + .... + n//2 ) // n

即汇总所有值,然后添加一个数字来处理舍入。

如@ Henrik的回答所述,这假设所有数字都是正数。

答案 1 :(得分:3)

(a + b + c + 1) / 3

说明:如果(a + b + c)%3 == 1,则向下舍入; if(a + b + c)%3 == 2,它被四舍五入。

至少这应该适用于a + b + c >= 0。您可能需要单独处理负值。

答案 2 :(得分:2)

Mahmoud只使用一个部门的答案的变体:

d = (((a+b+c) * 10) + 15) / 30

答案 3 :(得分:1)

应该如此简单:

d = (((a+b+c) * 10) / 3 + 5) / 10;