code: protected int findGTE(int[] list, int start, int len, int value)
    {
  
      int low = start;
      int high = start + (len - 1);
      int end = high;
  
      while (low <= high)
      {
        int mid = (low + high) / 2;
        int c = list[mid];
  
        if (c > value)
          high = mid - 1;
        else if (c < value)
          low = mid + 1;
        else
          return mid;
      }
  
      return (low <= end && list[low] > value) ? low : -1;
    }
docs: Find the first index that occurs in the list that is greater than or
  equal to the given value.
  
  @param list A list of integers.
  @param start The start index to begin the search.
  @param len The number of items to search.
  @param value Find the slot that has a value that is greater than or
  identical to this argument.
  
  @return The index in the list of the slot that is higher or identical
  to the identity argument, or -1 if no node is higher or equal.