On 10/21/2011 07:53 PM, Dodji Seketeli wrote:
- do + while (mx - mn> 1) { md = (mx + mn) / 2; if (MAP_START_LOCATION (LINEMAPS_MACRO_MAP_AT (set, md))> line) mn = md; else mx = md; - } while (mx - mn> 1); + } + + /* There are cases where mx - mn = 1 and where the map we want is + mn. Let's not miss it. */ + if (MAP_START_LOCATION (LINEMAPS_MACRO_MAP_AT (set, mn))<= line) + mx = mn;
I think a better fix to your binary search algorithm would be to change mn = md; to be mn = md + 1; since you've eliminated md as a possibility. And then change the test to (mn < mx). Jason