38 namespace Gecode {
namespace Float {
namespace Trigonometric {
47 #define I0__PI_2I FloatVal(0,pi_half_upper())
48 #define IPI_2__PII FloatVal(pi_half_lower(),pi_upper())
49 #define IPI__3PI_2I FloatVal(pi_lower(),3*pi_half_upper())
50 #define I3PI_2__2PII FloatVal(3*pi_half_lower(),pi_twice_upper())
51 #define POS(X) ((I0__PI_2I.in(X))?0: (IPI_2__PII.in(X))?1: (IPI__3PI_2I.in(X))?2: 3 )
52 #define ASININF_DOWN r.asin_down(aSinIv.min())
53 #define ASINSUP_UP r.asin_up(aSinIv.max())
59 switch (
POS(iv_min) )
86 switch (
POS(iv_max) )
122 template<
class A,
class B>
127 template<
class A,
class B>
135 (void)
new (home)
Sin<A,B>(home,x0,x1);
142 template<
class A,
class B>
147 template<
class A,
class B>
150 return new (home)
Sin<A,B>(home,share,*
this);
153 template<
class A,
class B>
158 int n_min = 2*
static_cast<int>(r.div_up(x0.min(),
pi_twice_upper()));
159 int n_max = 2*
static_cast<int>(r.div_up(x0.max(),
pi_twice_upper()));
160 if (x0.min() < 0) n_min-=2;
161 if (x0.max() < 0) n_max-=2;
167 if (n_iv_min > n_iv_max)
return ES_FAILED;
178 template<
class A,
class B>
183 template<
class A,
class B>
197 (void)
new (home)
Cos<A,B>(home,x0,x1);
203 template<
class A,
class B>
208 template<
class A,
class B>
211 return new (home)
Cos<A,B>(home,share,*
this);
214 template<
class A,
class B>
222 if (x0Trans.
min() < 0) n_min-=2;
223 if (x0Trans.
max() < 0) n_max-=2;
229 if (n_iv_min > n_iv_max)
return ES_FAILED;