Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix a uninitialized variable warning and simplify surf_cpu_ti_binary_search
[simgrid.git] / src / surf / cpu_ti.c
index 6ca6ee1..f40d1c6 100644 (file)
@@ -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;
 }