61 x = v.
x;
return *
this;
79 return gecode_boost::numeric::width(
x);
85 const FloatNum inf = std::numeric_limits<FloatNum>::infinity();
86 const FloatNum max = std::numeric_limits<FloatNum>::max();
91 return (u == inf) ? 0.0 : l;
98 if ((u > h) || (l < -h))
99 return std::ldexp(r.
median(l / 2.0,u / 2.0),1);
105 return (gecode_boost::numeric::singleton(
x) ||
106 (nextafter(
x.lower(),
x.upper()) ==
x.upper()));
110 return gecode_boost::numeric::singleton(
x);
114 return gecode_boost::numeric::in(n,
x);
118 return gecode_boost::numeric::zero_in(
x);
127 FloatVal p(gecode_boost::numeric::interval_lib::pi_half<FloatValImpType>());
132 FloatVal p(gecode_boost::numeric::interval_lib::pi<FloatValImpType>());
137 FloatVal p(gecode_boost::numeric::interval_lib::pi_twice<FloatValImpType>());
143 x += n;
return *
this;
147 x -= n;
return *
this;
151 x *= n;
return *
this;
155 x /= n;
return *
this;
160 x += v.
x;
return *
this;
164 x -= v.
x;
return *
this;
168 x *= v.
x;
return *
this;
172 x /= v.
x;
return *
this;
186 FloatNum mmi = (
x.min() == 0.0) ? 0.0 : -
x.min();
187 FloatNum mma = (
x.max() == 0.0) ? 0.0 :-
x.max();
246 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
254 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
263 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
271 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
280 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
288 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
297 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
305 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
314 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
320 if (!gecode_boost::numeric::interval_lib::checking_strict<FloatNum>
321 ::is_empty(
x.x.lower(),
x.x.upper())) {
322 if ((
x.x.lower() == y) && (
x.x.upper() == y))
325 if (((
x.x.lower() == y) &&
326 (nextafter(
x.x.lower(),
x.x.upper()) ==
x.x.upper())) ||
327 ((
x.x.upper() == y) &&
328 (nextafter(
x.x.upper(),
x.x.lower()) ==
x.x.lower())))
337 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
345 }
catch (gecode_boost::numeric::interval_lib::comparison_error&) {
375 template<
class Char,
class Traits>
376 std::basic_ostream<Char,Traits>&
378 return os <<
'[' << x.
min() <<
".." << x.
max() <<
']';
427#ifdef GECODE_HAS_MPFR
504namespace Gecode {
namespace Float {
bool singleton(void) const
Test whether float is a singleton.
friend FloatVal Float::hull(const FloatVal &x, const FloatVal &y)
FloatVal & operator/=(const FloatNum &n)
Divide by n.
static FloatVal pi(void)
Return lower bound of .
static FloatVal pi_twice(void)
Return .
FloatValImpType x
Implementation of float value.
bool zero_in(void) const
Test whether zero is included.
FloatVal & operator-=(const FloatNum &n)
Subtract by n.
bool in(FloatNum n) const
Test whether n is included.
FloatVal & operator*=(const FloatNum &n)
Multiply by n.
FloatNum max(void) const
Return upper bound.
void assign(FloatNum const &l, FloatNum const &u)
Assign lower bound l and upper bound u.
FloatVal & operator+=(const FloatNum &n)
Increment by n.
FloatNum med(void) const
Return median of float value.
FloatVal & operator=(const FloatNum &n)
Assignment operator.
friend FloatVal max(const FloatVal &x, const FloatVal &y)
friend FloatVal min(const FloatVal &x, const FloatVal &y)
bool tight(void) const
Test whether float is tight.
FloatNum size(void) const
Return size of float value (distance between maximum and minimum).
static FloatVal pi_half(void)
Return .
FloatVal(const FloatValImpType &i)
Initialize from implementation i.
gecode_boost::numeric::interval< FloatNum, gecode_boost::numeric::interval_lib::policies< R, P > > FloatValImpType
Implementation type for float value.
FloatVal(void)
Default constructor.
FloatNum min(void) const
Return lower bound.
Floating point rounding policy.
FloatNum median(FloatNum x, FloatNum y)
Return median of x and y (domain: ).
double FloatNum
Floating point number base type.
bool subset(const FloatVal &x, const FloatVal &y)
bool proper_subset(const FloatVal &x, const FloatVal &y)
FloatVal hull(const FloatVal &x, const FloatVal &y)
bool overlap(const FloatVal &x, const FloatVal &y)
FloatVal intersect(const FloatVal &x, const FloatVal &y)
Gecode toplevel namespace
FloatVal operator/(const FloatVal &x, const FloatVal &y)
FloatVal operator-(const FloatVal &x)
FloatVal asinh(const FloatVal &x)
bool operator<=(const FloatVal &x, const FloatVal &y)
void sin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
FloatVal operator+(const FloatVal &x)
void sqr(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
Archive & operator<<(Archive &e, FloatNumBranch nl)
void cos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void abs(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator<(const FloatVal &x, const FloatVal &y)
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void acos(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator>(const FloatVal &x, const FloatVal &y)
void log(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
bool operator>=(const FloatVal &x, const FloatVal &y)
void exp(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void atan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
FloatVal fmod(const FloatVal &x, const FloatVal &y)
FloatVal sinh(const FloatVal &x)
FloatVal acosh(const FloatVal &x)
FloatVal tanh(const FloatVal &x)
void asin(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
void pow(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for .
FloatVal atanh(const FloatVal &x)
FloatVal operator*(const FloatVal &x, const FloatVal &y)
FloatVal cosh(const FloatVal &x)
void nroot(Home home, FloatVar x0, int n, FloatVar x1)
Post propagator for for .
bool operator==(const FloatVal &x, const FloatVal &y)
bool operator!=(const FloatVal &x, const FloatVal &y)
void tan(Home home, FloatVar x0, FloatVar x1)
Post propagator for .