00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef __GECODE_FLOAT_TRIGONOMETRIC_HH__
00039 #define __GECODE_FLOAT_TRIGONOMETRIC_HH__
00040 #ifdef GECODE_HAS_MPFR
00041
00042 #include <gecode/float.hh>
00043
00049 namespace Gecode { namespace Float { namespace Trigonometric {
00050
00059 template<class A, class B>
00060 class Sin : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00061 protected:
00062 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00063 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00064
00066 Sin(Space& home, bool share, Sin& p);
00068 Sin(Home home, A x0, B x1);
00069 public:
00071 virtual Actor* copy(Space& home, bool share);
00073 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00075 static ExecStatus post(Home home, A x0, B x1);
00076 };
00077
00078
00087 template<class A, class B>
00088 class Cos : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00089 protected:
00090 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00091 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00092
00094 Cos(Space& home, bool share, Cos& p);
00096 Cos(Home home, A x0, B x1);
00097 public:
00099 virtual Actor* copy(Space& home, bool share);
00101 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00103 static ExecStatus post(Home home, A x0, B x1);
00104 };
00105
00114 template<class A, class B>
00115 class ASin : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00116 protected:
00117 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00118 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00119
00121 ASin(Space& home, bool share, ASin& p);
00123 ASin(Home home, A x0, B x1);
00124 public:
00126 virtual Actor* copy(Space& home, bool share);
00128 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00130 static ExecStatus post(Home home, A x0, B x1);
00131 };
00132
00133
00142 template<class A, class B>
00143 class ACos : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00144 protected:
00145 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00146 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00147
00149 ACos(Space& home, bool share, ACos& p);
00151 ACos(Home home, A x0, B x1);
00152 public:
00154 virtual Actor* copy(Space& home, bool share);
00156 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00158 static ExecStatus post(Home home, A x0, B x1);
00159 };
00160
00169 template<class A, class B>
00170 class Tan : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00171 protected:
00172 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00173 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00174
00176 Tan(Space& home, bool share, Tan& p);
00178 Tan(Home home, A x0, B x1);
00179 public:
00181 virtual Actor* copy(Space& home, bool share);
00183 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00185 static ExecStatus post(Home home, A x0, B x1);
00186 };
00187
00196 template<class A, class B>
00197 class ATan : public MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND> {
00198 protected:
00199 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x0;
00200 using MixBinaryPropagator<A,PC_FLOAT_BND,B,PC_FLOAT_BND>::x1;
00201
00203 ATan(Space& home, bool share, ATan& p);
00205 ATan(Home home, A x0, B x1);
00206 public:
00208 virtual Actor* copy(Space& home, bool share);
00210 virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
00212 static ExecStatus post(Home home, A x0, B x1);
00213 };
00214 }}}
00215
00216 #include <gecode/float/trigonometric/sincos.hpp>
00217 #include <gecode/float/trigonometric/asinacos.hpp>
00218 #include <gecode/float/trigonometric/tanatan.hpp>
00219 #endif
00220 #endif
00221
00222