示例#1
0
文件: box.cpp 项目: jadecastro/dreal3
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);
    }
}
示例#2
0
文件: box.cpp 项目: sunqxj/dreal3
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);
    }
}