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