2016-08-14 51 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

相關問題