Generated on Fri Oct 19 11:24:51 2018 for Gecode by doxygen 1.6.3

arithmetic.cpp

Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
00002 /*
00003  *  Main authors:
00004  *     Christian Schulte <schulte@gecode.org>
00005  *     Vincent Barichard <Vincent.Barichard@univ-angers.fr>
00006  *
00007  *  Copyright:
00008  *     Christian Schulte, 2002
00009  *     Vincent Barichard, 2012
00010  *
00011  *  This file is part of Gecode, the generic constraint
00012  *  development environment:
00013  *     http://www.gecode.org
00014  *
00015  *  Permission is hereby granted, free of charge, to any person obtaining
00016  *  a copy of this software and associated documentation files (the
00017  *  "Software"), to deal in the Software without restriction, including
00018  *  without limitation the rights to use, copy, modify, merge, publish,
00019  *  distribute, sublicense, and/or sell copies of the Software, and to
00020  *  permit persons to whom the Software is furnished to do so, subject to
00021  *  the following conditions:
00022  *
00023  *  The above copyright notice and this permission notice shall be
00024  *  included in all copies or substantial portions of the Software.
00025  *
00026  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00027  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00028  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00029  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00030  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00031  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00032  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 // STATISTICS: float-post