Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use C style dichotomy instead of CAML style dichotomy. :)
authorNavarrop <Pierre.Navarro@imag.fr>
Thu, 15 Sep 2011 14:47:49 +0000 (16:47 +0200)
committerNavarrop <Pierre.Navarro@imag.fr>
Thu, 15 Sep 2011 14:48:48 +0000 (16:48 +0200)
src/surf/cpu_ti.c

index 6ca6ee1..13ccde8 100644 (file)
@@ -1103,18 +1103,22 @@ 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)");
+
+  while(low<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)
+               low = mid + 1;
+       else
+               high = mid - 1;
+  }
 }