34 namespace Gecode {
namespace Float {
namespace Trigonometric {
43 #define I0__PI_2I FloatVal(0,pi_half_upper())
44 #define IPI_2__PII FloatVal(pi_half_lower(),pi_upper())
45 #define IPI__3PI_2I FloatVal(pi_lower(),3*pi_half_upper())
46 #define I3PI_2__2PII FloatVal(3*pi_half_lower(),pi_twice_upper())
47 #define POS(X) ((I0__PI_2I.in(X))?0: (IPI_2__PII.in(X))?1: (IPI__3PI_2I.in(X))?2: 3 )
48 #define ASININF_DOWN r.asin_down(aSinIv.min())
49 #define ASINSUP_UP r.asin_up(aSinIv.max())
55 switch (
POS(iv_min) )
58 if (
r.sin_down(iv_min) > aSinIv.max()) { n_min++; iv_min = -
ASINSUP_UP; }
59 else if (
r.sin_up(iv_min) < aSinIv.min()) { iv_min =
ASININF_DOWN; }
62 if (
r.sin_down(iv_min) > aSinIv.max()) { n_min++; iv_min = -
ASINSUP_UP; }
63 else if (
r.sin_up(iv_min) < aSinIv.min()) { n_min+=2; iv_min =
ASININF_DOWN; }
66 if (
r.sin_down(iv_min) > aSinIv.max()) { n_min++; iv_min = -
ASINSUP_UP; }
67 else if (
r.sin_up(iv_min) < aSinIv.min()) { n_min+=2; iv_min =
ASININF_DOWN; }
70 if (
r.sin_down(iv_min) > aSinIv.max()) { n_min+=3; iv_min = -
ASINSUP_UP; }
71 else if (
r.sin_up(iv_min) < aSinIv.min()) { n_min+=2; iv_min =
ASININF_DOWN; }
82 switch (
POS(iv_max) )
85 if (
r.sin_down(iv_max) > aSinIv.max()) { iv_max =
ASINSUP_UP; }
86 else if (
r.sin_up(iv_max) < aSinIv.min()) { n_max--; iv_max = -
ASININF_DOWN; }
89 if (
r.sin_down(iv_max) > aSinIv.max()) { iv_max =
ASINSUP_UP; }
90 else if (
r.sin_up(iv_max) < aSinIv.min()) { n_max++; iv_max = -
ASININF_DOWN; }
93 if (
r.sin_down(iv_max) > aSinIv.max()) { iv_max =
ASINSUP_UP; }
94 else if (
r.sin_up(iv_max) < aSinIv.min()) { n_max++; iv_max = -
ASININF_DOWN; }
97 if (
r.sin_down(iv_max) > aSinIv.max()) { n_max+=2; iv_max =
ASINSUP_UP; }
98 else if (
r.sin_up(iv_max) < aSinIv.min()) { n_max++; iv_max = -
ASININF_DOWN; }
118 template<
class A,
class B>
125 if (x0.min() < 0) n_min-=2;
126 if (x0.max() < 0) n_max-=2;
132 if (n_iv_min > n_iv_max)
return ES_FAILED;
138 template<
class A,
class B>
143 template<
class A,
class B>
152 (void)
new (home)
Sin<A,B>(home,x0,x1);
159 template<
class A,
class B>
164 template<
class A,
class B>
167 return new (home)
Sin<A,B>(home,*
this);
170 template<
class A,
class B>
182 template<
class A,
class B>
190 if (x0Trans.
min() < 0) n_min-=2;
191 if (x0Trans.
max() < 0) n_max-=2;
197 if (n_iv_min > n_iv_max)
return ES_FAILED;
203 template<
class A,
class B>
208 template<
class A,
class B>
223 (void)
new (home)
Cos<A,B>(home,x0,x1);
229 template<
class A,
class B>
234 template<
class A,
class B>
237 return new (home)
Cos<A,B>(home,*
this);
240 template<
class A,
class B>