2016-08-14 2 views
0

は、誰かがSとEの間の中間点を計算したい場合、彼らは言う:バイナリ検索インデックスがこのように計算されるのはなぜですか?私は、オンラインや本で読んすべてのコード部分で

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

数学的には

int mid = (s + e)/2; 
と同じもので、このではありません

なぜ、最初の方法でよく書かれているのですか?私の推測では、整数のオーバーフローを防ぐことですが、わかりません。 eは整数の最大値に近い場合

おかげ

+3

については

。実際、いくつかのコードは '(s + e)/ 2'を使用しますが、整数オーバーフローの問題を引き起こす可能性があります。 –

+0

整数の除算がどのように行われるかによって同じではありません。 –

+0

@EdHeal問題はちょうどオーバーフローしています。部門の丸めは、「s」と「e」が正である限り、同じように機能します。 –

答えて

1

は、その後(s+e)/2がオーバーフローすることができるが、s+(e-s)/2は(sが非負であると仮定して)することができません。例(MAX_INT-2 + MAX_INT) == -4ので、あなたが正しい答えを得ている(MAX_INT-2 + MAX_INT)/2 == -2

関連する問題