bisectionTransformXToIndex method

int bisectionTransformXToIndex(
  1. double x,
  2. int start,
  3. int end
)

二分查找法

Implementation

int bisectionTransformXToIndex(double x, int start, int end) {
  if (end == start || end == -1) {
    return start;
  }
  if (end - start == 1) {
    double startValue = indexToX(start);
    double endValue = indexToX(end);
    return (x - startValue).abs() < (x - endValue).abs() ? start : end;
  }
  int mid = start + (end - start) ~/ 2;
  double midValue = indexToX(mid);
  if (x < midValue) {
    return bisectionTransformXToIndex(x, start, mid);
  } else if (x > midValue) {
    return bisectionTransformXToIndex(x, mid, end);
  } else {
    return mid;
  }
}