diff --git a/Common/onelabUtils.cpp b/Common/onelabUtils.cpp index 223fcd23fec05d26766d909e1eb5a5adfbff86f3..54dad62fe98eddf159d96895ffd61f08601026df 100644 --- a/Common/onelabUtils.cpp +++ b/Common/onelabUtils.cpp @@ -147,6 +147,7 @@ namespace onelabUtils { bool incrementLoop(const std::string &level) { + const double eps = 1.e-15; // for roundoff // called at the end of the do{...} while(incrementLoops); bool recompute = false, loop = false; std::vector<onelab::number> numbers; @@ -170,7 +171,7 @@ namespace onelabUtils { int j = numbers[i].getIndex() + 1; double val = numbers[i].getValue() + numbers[i].getStep(); if(numbers[i].getMax() != onelab::parameter::maxNumber() && - val <= numbers[i].getMax()){ + val <= numbers[i].getMax() * (1 + eps)){ numbers[i].setValue(val); numbers[i].setIndex(j); onelab::server::instance()->set(numbers[i]); @@ -185,7 +186,7 @@ namespace onelabUtils { int j = numbers[i].getIndex() + 1; double val = numbers[i].getValue() + numbers[i].getStep(); if(numbers[i].getMin() != -onelab::parameter::maxNumber() && - val >= numbers[i].getMin()){ + val >= numbers[i].getMin() * (1 - eps)){ numbers[i].setValue(val); numbers[i].setIndex(j); onelab::server::instance()->set(numbers[i]); @@ -207,19 +208,19 @@ namespace onelabUtils { std::vector<double> getRange(onelab::number &p) { + const double eps = 1.e-15; // for roundoff std::vector<double> v; - if(p.getChoices().size()){ v = p.getChoices(); } else if(p.getMin() != -onelab::parameter::maxNumber() && p.getMax() != onelab::parameter::maxNumber()){ if(p.getStep() > 0){ - for(double d = p.getMin(); d <= p.getMax(); d += p.getStep()) + for(double d = p.getMin(); d <= p.getMax() * (1 + eps); d += p.getStep()) v.push_back(d); } else if(p.getStep() < 0){ - for(double d = p.getMin(); d <= p.getMax(); d -= p.getStep()) + for(double d = p.getMin(); d <= p.getMax() * (1 + eps); d -= p.getStep()) v.push_back(d); } }