36 namespace Gecode {
namespace Float {
namespace Arithmetic {
42 return x.min() >= 0.0;
48 return x.max() <= 0.0;
54 return (
x.min() <= 0.0) && (
x.max() >= 0.0);
136 template<
class VA,
class VB,
class VC>
142 template<
class VA,
class VB,
class VC>
148 template<
class VA,
class VB,
class VC>
154 template<
class VA,
class VB,
class VC>
162 if (x0.assigned() && x1.assigned() && x2.assigned())
167 template<
class VA,
class VB,
class VC>
204 if (
pos(x1) ||
pos(x2))
goto rewrite_ppp;
205 if (
neg(x1) ||
neg(x2))
goto rewrite_pnn;
209 if (
neg(x1) ||
pos(x2))
goto rewrite_nnp;
210 if (
pos(x1) ||
neg(x2))
goto rewrite_npn;
214 if (
pos(x2))
goto rewrite_ppp;
215 if (
neg(x2))
goto rewrite_npn;
219 if (
pos(x2))
goto rewrite_nnp;
220 if (
neg(x2))
goto rewrite_pnn;
224 assert(
any(x0) &&
any(x1));
226 r.mul_up(x0.min(),x1.min()))));
228 r.mul_down(x0.max(),x1.min()))));
231 if (
r.div_up(x2.min(),x1.min()) < x0.min())
233 if (
r.div_up(x2.min(),x0.min()) < x1.min())
237 if (
r.div_up(x2.max(),x1.max()) < x0.min())
239 if (
r.div_up(x2.max(),x0.max()) < x1.min())
244 assert((x0.val() == 0.0) && (x2.val() == 0.0));
249 assert((x1.val() == 0.0) && (x2.val() == 0.0));
263 if (
pos(x2))
goto rewrite_ppp;
264 if (
neg(x2))
goto rewrite_pnn;
269 if (x0.assigned() && x1.assigned()) {
284 if (
pos(x2))
goto rewrite_nnp;
285 if (
neg(x2))
goto rewrite_npn;
287 if (x0.max() != 0.0) {
292 if (x0.assigned() && x1.assigned()) {
301 ::
post(home(*
this),x0,x1,x2)));
322 if (
pos(x1) ||
pos(x2))
goto post_ppp;
323 if (
neg(x1) ||
neg(x2))
goto post_pnn;
324 }
else if (
neg(x0)) {
325 if (
neg(x1) ||
pos(x2))
goto post_nnp;
326 if (
pos(x1) ||
neg(x2))
goto post_npn;
327 }
else if (
pos(x1)) {
328 if (
pos(x2))
goto post_ppp;
329 if (
neg(x2))
goto post_npn;
330 }
else if (
neg(x1)) {
331 if (
pos(x2))
goto post_nnp;
332 if (
neg(x2))
goto post_pnn;