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;
+ }
}