18

5

The following is the pseudocode I got from a TopCoder tutorial about binary search

```
binary_search(A, target):
lo = 1, hi = size(A)
while lo <= hi:
mid = lo + (hi-lo)/2
if A[mid] == target:
return mid
else if A[mid] < target:
lo = mid+1
else:
hi = mid-1
// target was not found
```

Why do we calculate the middle value as *mid = lo + (hi - lo) / 2* ? Whats wrong with *(hi + lo) / 2*

I have a slight idea that it might be to prevent overflows but I'm not sure, perhaps someone can explain it to me and if there are other reasons behind this.