tuple<int, box, box> box::bisect(double const precision) const { // TODO(soonhok): implement other bisect policy int index = -1; double max_diam = 0.0; for (int i = 0; i < m_values.size(); i++) { double const current_diam = m_values[i].diam(); if (is_bisectable_at(i, precision) && current_diam > max_diam) { index = i; max_diam = current_diam; } } if (index == -1) { // Fail to find a dimension to bisect return make_tuple(-1, *this, *this); } else { return bisect_at(index); } }
tuple<int, box, box> box::bisect(double precision) const { // TODO(soonhok): implement other bisect policy int index = -1; double max_diam = numeric_limits<double>::min(); for (int i = 0; i < m_values.size(); i++) { double current_diam = m_values[i].diam(); double ith_precision = (*m_vars)[i]->hasPrecision() ? (*m_vars)[i]->getPrecision() : precision; if (current_diam > max_diam && current_diam > ith_precision && m_values[i].is_bisectable()) { index = i; max_diam = current_diam; } } if (index == -1) { // Fail to find a dimension to bisect return make_tuple(-1, *this, *this); } else { return bisect_at(index); } }