arith3.hpp gecode/third-party/boost/numeric/interval/detail/interval_prototype.hpp gecode/third-party/boost/numeric/interval/detail/test_input.hpp /usr/include/gecode/third-party/boost/numeric/interval.hpp boost boost::numeric boost::numeric::interval_lib /*Boostinterval/arith3.hpptemplateimplementationfile * *Thisheadersprovidesarithmeticalfunctions *whichcomputeanintervalgivensomebase *numbers.Theresultingintervalenclosesthe *realresultofthearithmeticoperation. * *Copyright2003GuillaumeMelquiond * *DistributedundertheBoostSoftwareLicense,Version1.0. *(SeeaccompanyingfileLICENSE_1_0.txtor *copyathttp://www.boost.org/LICENSE_1_0.txt) */ #ifndefBOOST_NUMERIC_INTERVAL_ARITH3_HPP #defineBOOST_NUMERIC_INTERVAL_ARITH3_HPP #include<gecode/third-party/boost/numeric/interval/detail/interval_prototype.hpp> #include<gecode/third-party/boost/numeric/interval/detail/test_input.hpp> namespaceboost{ namespacenumeric{ namespaceinterval_lib{ template<classI>inline Iadd(consttypenameI::base_type&x,consttypenameI::base_type&y) { typedeftypenameI::traits_typePolicies; if(detail::test_input<typenameI::base_type,Policies>(x,y)) returnI::empty(); typenamePolicies::roundingrnd; returnI(rnd.add_down(x,y),rnd.add_up(x,y),true); } template<classI>inline Isub(consttypenameI::base_type&x,consttypenameI::base_type&y) { typedeftypenameI::traits_typePolicies; if(detail::test_input<typenameI::base_type,Policies>(x,y)) returnI::empty(); typenamePolicies::roundingrnd; returnI(rnd.sub_down(x,y),rnd.sub_up(x,y),true); } template<classI>inline Imul(consttypenameI::base_type&x,consttypenameI::base_type&y) { typedeftypenameI::traits_typePolicies; if(detail::test_input<typenameI::base_type,Policies>(x,y)) returnI::empty(); typenamePolicies::roundingrnd; returnI(rnd.mul_down(x,y),rnd.mul_up(x,y),true); } template<classI>inline Idiv(consttypenameI::base_type&x,consttypenameI::base_type&y) { typedeftypenameI::traits_typePolicies; if(detail::test_input<typenameI::base_type,Policies>(x,y)||user::is_zero(y)) returnI::empty(); typenamePolicies::roundingrnd; returnI(rnd.div_down(x,y),rnd.div_up(x,y),true); } }//namespaceinterval_lib }//namespacenumeric }//namespaceboost #endif//BOOST_NUMERIC_INTERVAL_ARITH3_HPP