Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
let this code compile without warning
[simgrid.git] / src / surf / cpu_ti.c
index 47a3e3e..30a42b0 100644 (file)
@@ -733,7 +733,7 @@ static double surf_cpu_ti_get_power_scale(surf_cpu_ti_tgmr_t trace,
   point =
       surf_cpu_ti_binary_search(trace->trace->time_points, reduced_a, 0,
                                 trace->trace->nb_points - 1);
-  xbt_dynar_get_cpy(trace->power_trace->event_list, 0, &val);
+  xbt_dynar_get_cpy(trace->power_trace->event_list, point, &val);
   return val.value;
 }
 
@@ -1103,18 +1103,24 @@ 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;
+  while(low<high) {
+       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;
+  }
+  return mid;
 }