43 namespace Gecode {
namespace Int {
namespace Arithmetic {
50 template<
class Ops,
bool minus>
107 template<
class Ops,
bool minus>
114 template<
class Ops,
bool minus>
128 template<
class Ops,
bool minus>
135 template<
class Ops,
bool minus>
141 template<
class Ops,
bool minus>
157 assert((x0.
min() < 0) && (x0.
max() > 0));
158 assert((x1.
min() < 0) && (x1.
max() > 0));
177 if (static_cast<unsigned int>(ops.exp()) >=
sizeof(
int) * CHAR_BIT) {
182 ops.exp(ops.even() ? 30 : 31);
185 if (ops.exp() == 0) {
188 }
else if (ops.exp() == 1) {
193 assert(ops.exp() > 1);
208 if ((x0.
min() >= 0) || (x1.
min() >= 0))
211 if ((x0.
max() <= 0) || (x1.
max() <= 0))
214 assert((x0.
min() < 0) && (x0.
max() > 0));
215 assert((x1.
min() < 0) && (x1.
max() > 0));
217 (void)
new (home)
NrootBnd(home,x0,x1,ops);
237 if ((x0.min() >= 0) || (x1.min() >= 0))
240 if ((x0.max() <= 0) || (x1.max() <= 0))
268 return ops.tpow(x+1)-1;
283 return (x < 0) ? -
ops.cnroot(-x) :
ops.fnroot(x);
287 return (x < 0) ? -
ops.cnroot(-x) :
ops.fnroot(x);
291 template<
class Ops,
bool minus>
298 template<
class Ops,
bool minus>
313 template<
class Ops,
bool minus>
320 template<
class Ops,
bool minus>
326 template<
class Ops,
bool minus>
337 template<
class Ops,
bool minus>
376 if (static_cast<unsigned int>(ops.exp()) >=
sizeof(
int) * CHAR_BIT) {
381 ops.exp(ops.even() ? 30 : 31);
384 if (ops.exp() == 0) {
387 }
else if (ops.exp() == 1) {
392 assert(ops.exp() > 1);
407 if ((x0.
min() >= 0) || (x1.
min() >= 0))
410 if ((x0.
max() <= 0) || (x1.
max() <= 0))
413 assert((x0.
min() < 0) && (x0.
max() > 0));
414 assert((x1.
min() < 0) && (x1.
max() > 0));
416 (void)
new (home)
NrootDom(home,x0,x1,ops);
447 if ((x0.min() >= 0) || (x1.min() >= 0))
450 if ((x0.max() <= 0) || (x1.max() <= 0))
455 return x0.assigned() && x1.assigned() ? home.
ES_SUBSUMED(*
this)