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
00039
00040 #include <gecode/float/arithmetic.hh>
00041
00042 namespace Gecode {
00043
00044 void
00045 abs(Home home, FloatVar x0, FloatVar x1) {
00046 using namespace Float;
00047 GECODE_POST;
00048 GECODE_ES_FAIL((Arithmetic::Abs<FloatView,FloatView>::post(home,x0,x1)));
00049 }
00050
00051
00052 void
00053 max(Home home, FloatVar x0, FloatVar x1, FloatVar x2) {
00054 using namespace Float;
00055 GECODE_POST;
00056 GECODE_ES_FAIL((Arithmetic::Max<FloatView,FloatView,FloatView>::post(home,x0,x1,x2)));
00057 }
00058
00059 void
00060 max(Home home, const FloatVarArgs& x, FloatVar y) {
00061 using namespace Float;
00062 if (x.size() == 0)
00063 throw TooFewArguments("Float::max");
00064 GECODE_POST;
00065 ViewArray<FloatView> xv(home,x);
00066 GECODE_ES_FAIL(Arithmetic::NaryMax<FloatView>::post(home,xv,y));
00067 }
00068
00069
00070 void
00071 min(Home home, FloatVar x0, FloatVar x1, FloatVar x2) {
00072 using namespace Float;
00073 GECODE_POST;
00074 GECODE_ES_FAIL((Arithmetic::Min<FloatView,FloatView,FloatView>::post(home,x0,x1,x2)));
00075 }
00076
00077 void
00078 min(Home home, const FloatVarArgs& x, FloatVar y) {
00079 using namespace Float;
00080 if (x.size() == 0)
00081 throw TooFewArguments("Float::min");
00082 GECODE_POST;
00083 ViewArray<MinusView> m(home,x.size());
00084 for (int i=x.size(); i--; )
00085 m[i] = MinusView(x[i]);
00086 MinusView my(y);
00087 GECODE_ES_FAIL(Arithmetic::NaryMax<MinusView>::post(home,m,my));
00088 }
00089
00090
00091 void
00092 mult(Home home, FloatVar x0, FloatVar x1, FloatVar x2) {
00093 using namespace Float;
00094 GECODE_POST;
00095 GECODE_ES_FAIL((Arithmetic::Mult<FloatView>::post(home,x0,x1,x2)));
00096 }
00097
00098 void
00099 sqr(Home home, FloatVar x0, FloatVar x1) {
00100 using namespace Float;
00101 GECODE_POST;
00102 GECODE_ES_FAIL((Arithmetic::Sqr<FloatView>::post(home,x0,x1)));
00103 }
00104
00105 void
00106 sqrt(Home home, FloatVar x0, FloatVar x1) {
00107 using namespace Float;
00108 GECODE_POST;
00109 GECODE_ES_FAIL((Arithmetic::Sqrt<FloatView,FloatView>::post(home,x0,x1)));
00110 }
00111
00112 void
00113 pow(Home home, FloatVar x0, int n, FloatVar x1) {
00114 using namespace Float;
00115 if (n < 0)
00116 throw OutOfLimits("nroot");
00117 GECODE_POST;
00118 GECODE_ES_FAIL((Arithmetic::Pow<FloatView,FloatView>::post(home,x0,x1,n)));
00119 }
00120
00121 void
00122 nroot(Home home, FloatVar x0, int n, FloatVar x1) {
00123 using namespace Float;
00124 if (n < 0)
00125 throw OutOfLimits("nroot");
00126 GECODE_POST;
00127 GECODE_ES_FAIL((Arithmetic::NthRoot<FloatView,FloatView>::post(home,x0,x1,n)));
00128 }
00129
00130 void
00131 div(Home home, FloatVar x0, FloatVar x1, FloatVar x2) {
00132 using namespace Float;
00133 GECODE_POST;
00134 GECODE_ES_FAIL(
00135 (Arithmetic::Div<FloatView,FloatView,FloatView>::post(home,x0,x1,x2)));
00136 }
00137
00138 }
00139
00140