40 namespace Gecode {
namespace Float {
namespace Arithmetic {
46 return x.min() >= 0.0;
52 return x.max() <= 0.0;
58 return (
x.min() <= 0.0) && (
x.max() >= 0.0);
141 template<
class VA,
class VB,
class VC>
147 template<
class VA,
class VB,
class VC>
154 template<
class VA,
class VB,
class VC>
160 template<
class VA,
class VB,
class VC>
168 if (x0.assigned() && x1.assigned() && x2.assigned())
173 template<
class VA,
class VB,
class VC>
202 return new (home)
Mult<View>(home,share,*
this);
210 if (
pos(x1) ||
pos(x2))
goto rewrite_ppp;
211 if (
neg(x1) ||
neg(x2))
goto rewrite_pnn;
215 if (
neg(x1) ||
pos(x2))
goto rewrite_nnp;
216 if (
pos(x1) ||
neg(x2))
goto rewrite_npn;
220 if (
pos(x2))
goto rewrite_ppp;
221 if (
neg(x2))
goto rewrite_npn;
225 if (
pos(x2))
goto rewrite_nnp;
226 if (
neg(x2))
goto rewrite_pnn;
230 assert(
any(x0) &&
any(x1));
232 r.mul_up(x0.min(),x1.min()))));
234 r.mul_down(x0.max(),x1.min()))));
237 if (
r.div_up(x2.min(),x1.min()) < x0.min())
239 if (
r.div_up(x2.min(),x0.min()) < x1.min())
243 if (
r.div_up(x2.max(),x1.max()) < x0.min())
245 if (
r.div_up(x2.max(),x0.max()) < x1.min())
250 assert((x0.val() == 0.0) && (x2.val() == 0.0));
255 assert((x1.val() == 0.0) && (x2.val() == 0.0));
269 if (
pos(x2))
goto rewrite_ppp;
270 if (
neg(x2))
goto rewrite_pnn;
275 if (x0.assigned() && x1.assigned()) {
290 if (
pos(x2))
goto rewrite_nnp;
291 if (
neg(x2))
goto rewrite_npn;
293 if (x0.max() != 0.0) {
298 if (x0.assigned() && x1.assigned()) {
307 ::
post(home(*
this),x0,x1,x2)));
328 if (
pos(x1) ||
pos(x2))
goto post_ppp;
329 if (
neg(x1) ||
neg(x2))
goto post_pnn;
330 }
else if (
neg(x0)) {
331 if (
neg(x1) ||
pos(x2))
goto post_nnp;
332 if (
pos(x1) ||
neg(x2))
goto post_npn;
333 }
else if (
pos(x1)) {
334 if (
pos(x2))
goto post_ppp;
335 if (
neg(x2))
goto post_npn;
336 }
else if (
neg(x1)) {
337 if (
pos(x2))
goto post_nnp;
338 if (
neg(x2))
goto post_pnn;