2016-08-14 50 views
0

在每一段代码我看了网上或书,说如果有人想计算S和E之间的中点,他们这样做:为什么用这种方式计算二分搜索索引?

int mid = s + ((e - s)/2); 

数学这不就是一回事

int mid = (s + e)/2; 

那么为什么它经常以第一种方式写?我的猜测是防止整数溢出,但不确定。

由于

+3

您得到了正确的答案。实际上,有些代码确实使用'(s + e)/ 2',但是,它可能会导致整数溢出问题。 –

+0

由于整数分割的原因,它们是不一样的。 –

+0

@EdHeal问题只是溢出。只要's'和'e'都是正值,那么在该部门中的四舍五入就是一样的。 –

回答

1

如果e接近最大值为整数,则可以(s+e)/2溢出,但s+(e-s)/2不能(假设s非负)。

例如(MAX_INT-2 + MAX_INT) == -4,所以(MAX_INT-2 + MAX_INT)/2 == -2

相关问题