X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e22839bfb70546721ec09e62df7a01c8de3f029..5bb24107d10842e458665a0a6c489a44d6108796:/src/surf/cpu_ti.c diff --git a/src/surf/cpu_ti.c b/src/surf/cpu_ti.c index 6ca6ee188d..f40d1c62a6 100644 --- a/src/surf/cpu_ti.c +++ b/src/surf/cpu_ti.c @@ -1103,18 +1103,21 @@ static double surf_cpu_ti_solve_trace_simple(surf_cpu_ti_trace_t trace, static int surf_cpu_ti_binary_search(double *array, double a, int low, int high) { - int mid = low + (high - low) / 2; - XBT_DEBUG("a %lf low %d high %d mid %d value %lf", a, low, high, mid, - array[mid]); - /* a == array[mid] */ - if (array[mid] == a) - return mid; - /* a is between mid and mid+1 */ - if (array[mid] < a && array[mid + 1] > a) - return mid; - - if (array[mid] < a) - return surf_cpu_ti_binary_search(array, a, mid + 1, high); - else - return surf_cpu_ti_binary_search(array, a, low, mid - 1); + xbt_assert(low < high, "Wrong parameters: low (%d) should be smaller than" + " high (%d)", low, high); + + int mid; + do { + mid = low + (high - low) / 2; + XBT_DEBUG("a %lf low %d high %d mid %d value %lf", a, low, high, mid, + array[mid]); + + if (array[mid] > a) + high = mid; + else + low = mid; + } + while (low < high - 1); + + return low; }