我想计算三个数字的平均值,例如:
d = int(round((a + b + c) / 3.0))
a
,b
,c
,d
为整数。
是否可以仅使用整数得到相同的结果?
我对此感兴趣是因为性能原因,我假设使用整数进行数学计算应该比使用浮点数更快。
上面的示例将整数转换为浮点数,计算结果,对其进行舍入并转换回整数。是否可以避免int< - >浮动转换?
答案 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;