43 template<
typename Treal>
65 else if (other.
empty()) {
87 if ( !intersection.
empty() ) {
117 inline bool cover(Treal
const value)
const {
121 return (value <= upperBound && value >=
lowerBound);
133 throw Failure(
"Interval<Treal>::increase(Treal const) : "
134 "Attempt to increase empty interval.");
163 return *
this + (-1.0 * other);
191 void puriStep(
int poly, Treal alpha);
201 template<
typename Treal>
207 template<
typename Treal>
208 inline Interval<Treal>
operator+(Treal
const value,
209 Interval<Treal>
const & other) {
210 return Interval<Treal>(value + other.lowerBound,
211 value + other.upperBound);
216 template<
typename Treal>
221 assert(other.
low() >= 0);
227 template<
typename Treal>
229 if (upperBound > 2.0 || lowerBound < -1.0)
230 throw Failure(
"Interval<Treal>::puriStep(int) : It is assumed here "
231 "that the interval I is within [-1.0, 2.0]");
245 bool nonEmptyIntervalInZeroToOne =
false;
246 if(upperBound > lowerBound && lowerBound >= 0 && upperBound <= 1)
247 nonEmptyIntervalInZeroToOne =
true;
252 upperBound = 2 * upperBound - upperBound * upperBound;
253 lowerBound = 2 * lowerBound - lowerBound * lowerBound;
254 if(nonEmptyIntervalInZeroToOne && upperBound < lowerBound) {
256 Treal midPoint = (lowerBound + upperBound) / 2;
257 upperBound = lowerBound = midPoint;
263 upperBound = upperBound * upperBound;
264 lowerBound = lowerBound * lowerBound;
268 template<
typename Treal>
270 if (upperBound > 2.0 || lowerBound < -1.0)
271 throw Failure(
"Interval<Treal>::puriStep(int) : It is assumed here "
272 "that the interval I is within [-1.0, 1.0]");
291 template<
typename Treal>
293 if (upperBound > 2.0 || lowerBound < -1.0)
294 throw Failure(
"Interval<Treal>::puriStep(int, real) : It is assumed here "
295 "that the interval I is within [-1.0, 2.0]");
309 bool nonEmptyIntervalInZeroToOne =
false;
310 if(upperBound > lowerBound && lowerBound >= 0 && upperBound <= 1)
311 nonEmptyIntervalInZeroToOne =
true;
316 upperBound = 2 * alpha * upperBound - alpha * alpha * upperBound * upperBound;
317 lowerBound = 2 * alpha * lowerBound - alpha * alpha * lowerBound * lowerBound;
318 if(nonEmptyIntervalInZeroToOne && upperBound < lowerBound) {
320 Treal midPoint = (lowerBound + upperBound) / 2;
321 upperBound = lowerBound = midPoint;
327 upperBound = ( alpha * upperBound + (1-alpha) ) * ( alpha * upperBound + (1-alpha) );
328 lowerBound = ( alpha * lowerBound + (1-alpha) ) * ( alpha * lowerBound + (1-alpha) );
332 template<
typename Treal>
334 if (upperBound > 2.0 || lowerBound < -1.0)
335 throw Failure(
"Interval<Treal>::invPuriStep(int, real) : It is assumed here "
336 "that the interval I is within [-1.0, 2.0]");
356 template<
typename Treal>
362 s<<
"["<<in.
low()<<
", "<<in.
upp()<<
"]";