Generated on Tue Apr 18 10:21:33 2017 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  *  Last modified:
00012  *     $Date: 2017-04-10 13:21:37 +0200 (Mon, 10 Apr 2017) $ by $Author: schulte $
00013  *     $Revision: 15631 $
00014  *
00015  *  This file is part of Gecode, the generic constraint
00016  *  development environment:
00017  *     http://www.gecode.org
00018  *
00019  *  Permission is hereby granted, free of charge, to any person obtaining
00020  *  a copy of this software and associated documentation files (the
00021  *  "Software"), to deal in the Software without restriction, including
00022  *  without limitation the rights to use, copy, modify, merge, publish,
00023  *  distribute, sublicense, and/or sell copies of the Software, and to
00024  *  permit persons to whom the Software is furnished to do so, subject to
00025  *  the following conditions:
00026  *
00027  *  The above copyright notice and this permission notice shall be
00028  *  included in all copies or substantial portions of the Software.
00029  *
00030  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00031  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00032  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00033  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00034  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00035  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00036  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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 // STATISTICS: float-post