30 const std::vector<double>& val_table,
32 int size = range_table.size();
38 while (left + 1 != right) {
39 mid = ((right - left) >> 1) + left;
41 if (range_table[mid] >= to_find) {
52 if (left == (size - 1)) {
53 return val_table[range_table.size() - 1];
56 double range = range_table[right] - range_table[left];
58 if (fabs(range) < 1e-6) {
62 double fraction = (to_find - range_table[left]) / range;
64 return interpolate_1d(val_table[left], val_table[right], fraction);