1 #ifndef realroot_sparse_monomials_hpp
2 #define realroot_sparse_monomials_hpp
11 # define TMPL template<class C, class O, class MONOM, class REP>
12 # define TMPLX template<class C, class O, class MONOM, class REP, class X>
13 # define Polynomial monomial_seq<C,O,MONOM,REP>
14 # define CLASS monomial_seq
15 # define sparse_monomials sparse::monomial_seq
24 template<
class C,
class O = DegRevLex,
26 class REP=std::list<MONOM> >
34 typedef typename base_t::value_type
monom_t;
50 Polynomial(
const monom_t& m): base_t() { this->push_back(m);};
62 less (
const monom_t & m1,
const monom_t & m2) {
64 return m_order->
less(m1.begin(),m1.size(),
65 m2.begin(),m2.size());
79 TMPL MonomialOrdering* Polynomial::m_order = (MonomialOrdering*)
new O;
84 this ->push_back(
monom_t(c,d,v));}
90 for (const_iterator it = this->begin(); it != this->end(); ++it)
98 return ((base_t)*
this==(base_t)p);
104 return (this->
size()==0);
106 return(this->
size()==1 && (this->begin()->coeff() == c) &&
degree(*this->begin())== 0);
116 typedef typename Polynomial::const_iterator const_iterator;
117 typedef typename Polynomial::iterator iterator;
118 typedef typename Polynomial::value_type coeff_type;
126 result.resize(p1.size()+p2.size());
127 iterator i=result.begin();
128 while (b1!=e1 && b2!=e2) {
129 if(Polynomial::less(*b2,*b1))
131 else if(Polynomial::less(*b1,*b2))
134 coeff_type c=b1->coeff()+ b2->coeff();
143 while (b1!=e1) *i++=*b1++;
144 while (b2!=e2) *i++=*b2++;
146 int m=std::distance(result.begin(),i);
156 typedef typename Polynomial::const_iterator const_iterator;
157 typedef typename Polynomial::iterator iterator;
158 typedef typename Polynomial::value_type coeff_type;
161 iterator b1=p1.begin();
162 const_iterator b2=p2.begin();
163 while (b1!=p1.end() && b2!=p2.end()) {
164 if(Polynomial::less(*b2,*b1))
166 else if(Polynomial::less(*b1,*b2))
168 b1 = p1.insert(b1,*b2); b1++; b2++;
172 coeff_type c=b1->coeff() + b2->coeff();
174 b1->set_coeff(c); ++b1;
181 p1.insert(b1,b2,p2.end());
184 template<
class C,
class O,
class MONOM,
class REP,
class I,
class J,
class M>
186 typedef typename Polynomial::value_type::coeff_t coeff_type;
189 if(Polynomial::less(m2,*b1))
193 else if(Polynomial::less(*b1,m2))
200 coeff_type c=b1->coeff() + m2.coeff();
208 b1 = p1.insert(b1,m2);
236 typedef typename Polynomial::const_iterator const_iterator;
237 typedef typename Polynomial::iterator iterator;
238 typedef typename Polynomial::value_type coeff_type;
244 result.resize(p1.size()+p2.size());
245 iterator i=result.begin();
246 while (b1!=e1 && b2!=e2) {
247 if(Polynomial::less(*b2,*b1))
249 else if(Polynomial::less(*b1,*b2))
251 *i=*b2++; i->coeff()*= -1; i++;
254 coeff_type c=b1->coeff()- b2->coeff();
263 while (b1!=e1) *i++=*b1++;
264 while (b2!=e2) {*i=*b2++;i->coeff()*=-1;i++;}
266 int m=std::distance(result.begin(),i);
290 for(
typename Polynomial::iterator it=r.begin(); it!=r.end(); ++it) {
307 template <
class C,
class O,
class MONOM,
class REP,
class M>
inline void
310 typename Polynomial::const_iterator
b=a.begin();
311 typename Polynomial::iterator i=r.begin();
312 for(; b!=a.end(); ++i, ++
b) *i = (*b) * m;
325 typename Polynomial::iterator i=r.begin();
326 for(; i!=r.end(); ++i) *i *= m;
329 template<
class C,
class O,
class MONOM,
class REP,
class M>
inline void
332 typedef typename Polynomial::const_iterator const_iterator;
333 typedef typename Polynomial::iterator iterator;
334 typedef typename Polynomial::monom_t R;
337 iterator i=result.begin();
339 for(const_iterator
b=a.begin();
b!=a.end(); ++
b)
342 (i=result.insert(i,tmp))++;
350 if (a.size()==0)
return;
351 if (b.size()==0)
return;
352 if (a.size()<b.size())
364 typedef typename Polynomial::const_iterator const_iterator;
365 typedef typename Polynomial::iterator iterator;
366 typedef typename Polynomial::monomt_t M;
370 for(const_iterator i=b.begin();i !=b.end();i++)
374 iterator ip = r.begin();
375 for(const_iterator j=a.begin();j != a.end();j++) {
377 ip =
add(r,ip,r.end(),m);
390 typename Polynomial::const_iterator
b,
391 typename Polynomial::const_iterator e,
393 typedef typename Polynomial::const_iterator const_iterator;
394 int n=std::distance(b,e);
397 if (n==0) r.resize(0);
401 const_iterator med=
b;
402 for(
int i=0; i<n/2 && med !=e;i++,med++) {}
434 for(
typename Polynomial::iterator it=f.begin(); it != f.end(); it++)
453 template<
class C,
class O,
class MONOM,
class REP,
class U>
void
457 typename Polynomial::monom_t m;
458 for(
typename Polynomial::const_iterator it=f.begin(); it != f.end(); it++) {
460 if (v<(
int)m.
size()) m.set_expt(v,0);
467 for(
typename Polynomial::const_iterator it=f.begin(); it != f.end(); it++) {
473 template <
class R>
int lvar (
const R & p) {
475 for (
typename R::const_iterator it = p.begin(); it != p.end(); ++it)
481 template <
class R>
unsigned nbvar (
const R & p) {
486 template <
class R>
int
493 for (
typename R::const_iterator it = p.begin(); it != p.end(); ++it)
500 template <
class R>
int
507 for (
typename R::const_iterator it = p.begin(); it != p.end(); ++it)
509 if(i<=it->nvars()) d =
std::max(d,(
int)(*it)[i]);
515 template<
class R>
typename R::coeff_t&
518 template<
class R>
typename R::coeff_t
525 template<
class POL>
typename POL::coeff_t
527 const typename POL::monom_t & mono)
529 typedef typename POL::coeff_t coeff_t;
530 typename POL::const_iterator m;
531 for(m = p.begin(); m!= p.end() && !IsComparable((*m),mono); m++) {}
542 template<
class POL>
typename POL::const_iterator
545 typename POL::const_iterator it=p.end();
553 template<
class R>
void
556 typedef typename R::monom_t monom_t;
557 typedef typename monom_t::coeff_t coeff_t;
565 monom_t mb = (*b.begin()), m;
567 while( a != (coeff_t)0 &&
divide(*a.begin(), mb, m) )
571 if ( m != 0 )
add(q,m);
587 for (
typename Polynomial::const_iterator it = p.begin(); it != p.end(); ++it) {
590 m*=(
typename Polynomial::coeff_t)(*it)[i];
591 m.set_expt(i,(*it)[i]-1);
605 for (
typename Polynomial::const_iterator it = p.begin(); it != p.end(); ++it) {
622 TMPL typename Polynomial::coeff_t
624 const typename Polynomial::coeff_t &x,
625 const typename Polynomial::coeff_t &y) {
626 typename Polynomial::coeff_t r(0);
627 for(
typename Polynomial::const_iterator it=p.begin(); it!=p.end(); ++it)
629 typename Polynomial::coeff_t
c(it->coeff());
631 for(
int k=0;k<(int)(*it)[0];k++)
633 for(
int k=0;k<(int)(*it)[1];k++)
641 template<
class C,
class O,
class MONOM,
class REP,
class R,
class VCT>
void
646 for(
typename Polynomial::const_iterator it=p.begin(); it!=p.end(); ++it)
649 for(
unsigned j=0; j< (unsigned)x.size() && j< (unsigned)it->nvars();++j)
650 for(
int k=0;k<(int)(*it)[j];k++)
659 template<
class R,
class C,
class O,
class MONOM,
class REP,
class X>
inline void
662 for(
typename Polynomial::const_iterator it=p.begin(); it!=p.end(); ++it)
665 for(
int k=0;k<(int)(*it)[0];k++)
676 for(
typename Polynomial::const_iterator it=p.begin();it != p.end();it++) {
678 for (
int i=0;i<d-
degree(*it);i++)
mul(t,v);
688 for(
typename Polynomial::const_iterator it=p.begin();it != p.end();it++) {
690 for (
int i=0;i<d-(*it)[n];i++)
mul(t,v);
698 template <
class MP> MP
699 convert(
const MP &
P,
typename MP::coeff_t x,
typename MP::coeff_t y,
int ind) {
700 typedef typename MP::const_iterator const_iterator;
701 typedef typename MP::coeff_t coeff_t;
702 typedef typename MP::monom_t monom_t;
706 for(
int i=0;i<=2;i++)
708 if(ind!=i) {ind1=i;
break;}
710 for(
int i=0;i<=2;i++)
712 if(ind!=i && ind1!=i) {ind2=i;
break;}
714 for(const_iterator i = P.begin(); i != P.end(); ++i)
716 coeff_t k=i->coeff();
717 int puissx=(*i)[ind1];
718 int puissy=(*i)[ind2];
720 coeff_t coeff1=
pow(x,puissx);
721 coeff_t coeff2=
pow(y,puissy);
723 MP P1=monom_t(k,ind,d);
731 template <
class C,
class O,
class MONOM,
class REP,
class VARIABLES>
736 if ( P.begin() == P.end() )
738 return std::string(
"0");
741 for(
typename Polynomial::const_iterator i = P.begin(); i != P.end();i++ ) {
743 if(s[0] !=
'-' && s[0] !=
'+' && i != P.begin())
753 template <
class OS,
class C,
class O,
class MONOM,
class REP,
class VARIABLES> OS&
757 if ( P.begin() == P.end() )
762 for(
typename Polynomial::const_iterator i = P.begin(); i != P.end();i++ ) {
764 if(s[0] !=
'-' && s[0] !=
'+' && i != P.begin())
774 template <
class OS,
class C,
class O,
class MONOM,
class REP,
class VARIABLES> OS&
776 if ( P.begin() == P.end() )
781 for(
typename Polynomial::const_iterator i = P.begin(); i != P.end();i++ ) {
782 std::ostringstream sm;
784 if(sm.str()[0] !=
'-' && sm.str()[0] !=
'+' && i != P.begin())
786 os<<sm.str().c_str();
791 template <
class OS,
class C,
class O,
class MONOM,
class REP> OS&
799 template <
class OS,
class C,
class O,
class MONOM,
class REP> OS&
802 if ( P.begin() == P.end() )
807 for(
typename Polynomial::const_iterator i=P.begin(); i != P.end();++i)
809 os<<
" "<<i->coeff()<<
" [";
810 for(
int l=0;l<i->size();l++) os<<(*i)[l]<<
" ";
819 template <
class POL,
class C>
POL
824 typedef typename POL::monom_t monomial;
826 monomial tmpmonomial;
829 int i1 = (i + 1) % 3;
830 int i2 = (i + 2) % 3;
833 if ( (a!=0) && ( monom->operator[](i0) !=0 ) )
835 polynom = binomial< POL >(
C(1.), i0, monom->operator[](i0), a);
838 expt[i1] = monom->operator[](i1);
839 expt[i2] = monom->operator[](i2);
841 if ( ( expt[i0] == 0 ) && ( expt[i1] == 0 ) && ( expt[i2] == 0 ) )
842 tmpmonomial = monomial( monom->coeff(), 0, 0 );
843 else tmpmonomial = monomial( monom->coeff(), 3, expt );
845 polynom *= tmpmonomial;
848 else polynom = ( *monom );
856 template <
class POL,
class C >
POL
863 for (
typename POL::const_iterator i = np.begin(); i != np.end(); ++i ) {
864 i->coeff()*=
pow( a,
int( i->operator[]( v ) ) );
870 template<
class T,
class MP,
class V> T
871 eval(
const MP& p,
const V& v) {
873 for(
typename MP::const_iterator it=p.begin(); it!=p.end(); ++it)
876 for(
unsigned i=0;i< it->size()&&i<v.size();++i)
877 for(
int k=0;k<(*it)[i];k++)
888 template<
class R,
class MP,
class V>
void
889 eval(R& r,
const MP& p,
const V& v,
unsigned n) {
891 for(
typename MP::const_iterator it=p.begin(); it!=p.end(); ++it)
895 for(
unsigned i=0;i< it->size()&&i<n;++i)
896 for(
int k=0;k<(*it)[i];k++) {
905 template<
class MP,
class X> MP
906 subs(
unsigned var,
const X& val,
const MP &
P)
912 for(
typename MP::const_iterator it = P.begin(); it != P.end(); ++it )
914 if ( it->size() > var )
917 X tmp =
pow(val,m[var]);
929 template<
class MP> MP
930 subs(
const MP &
P,
int var,
typename MP::coeff_t val)
933 typedef typename MP::coeff_t coeff_t;
937 for (
typename MP::const_iterator it = P.begin();
938 it != P.end(); ++it )
940 monom_t m(it->coeff());
941 for(
int ind=0; ind<(
lvar(P)+1); ++ind)
945 for(
int k=0;k<(int)(*it)[ind];k++)
952 monom_t mon(coeff_t(1),(*it)[ind],ind);
967 Result += monom_t(C);
974 template<
class MP> MP
975 subs(
const MP &
P,
char* x,
typename MP::coeff_t val) {
980 return subs(P,xi,val);
984 template<
class T>
void print(
const T & x) {std::cout<<x<<std::endl;}
987 template<
class MP> MP
988 swap(
const MP &
P,
int var_i,
int var_j)
991 typedef typename MP::monom_t monom_t;
992 for (
typename MP::const_iterator it = P.begin();
993 it != P.end(); ++it )
995 monom_t m(it->coeff());
996 for(
int ind=0; ind<(
lvar(P)+1); ++ind)
998 if((*it)[ind] !=0 ) {
1000 m*=monom_t(var_j,(*it)[ind]);
1003 m*=monom_t(var_i,(*it)[ind]);
1005 m*= monom_t(ind,(*it)[ind]);
1016 template<
class MP> MP
1017 swap(
const MP &
P,
char* x_i,
char* x_j)
1019 typedef typename MP::monom_t monom_t;
1020 int xi = monom_t::index_of_var(x_i);
1021 int xj = monom_t::index_of_var(x_j);
1022 return swap(P,xi,xj);
1026 template <
class C,
class O,
class MONOM,
class REP>
C
1030 for(
typename Polynomial::const_iterator i = P.begin(); i != P.end();i++ ) {
1031 d=
gcd(d,i->coeff());
1042 assign(sparse::monomial_seq<C,O,MONOM,REP>& p,
const C&c) {
1043 p = sparse::monomial_seq<C,O,MONOM,REP>(); p.push_back(c);
1046 template<
class U,
class V,
class O,
class UMONOM,
class UREP,
class VMONOM,
class VREP>
void
1047 assign(sparse::monomial_seq<U,O,UMONOM,UREP>& p,
1048 const sparse::monomial_seq<V,O,VMONOM,VREP>& q) {
1053 for (
typename sparse::monomial_seq<V,O,VMONOM,VREP>::const_iterator it = q.begin();
1054 it != q.end(); ++it ) {
1056 MonomialU m(c,it->rep());
1063 # define SparsePolynomial sparse:: monomial_seq<C,O,MONOM,REP>
1065 template<
class A,
class B>
struct use;
1066 struct operators_of;
1138 #undef SparsePolynomial
1145 #endif // realroot_sparse_monomial_hpp
static void mul(SparsePolynomial &r, const C &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1114
static void div(SparsePolynomial &r, const SparsePolynomial &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1118
void sub(dual< C, O > &res, const dual< C, O > &a, const dual< C, O > &b)
Definition: sparse_dual.hpp:120
bool operator==(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:88
MP convert(const MP &P, typename MP::coeff_t x, typename MP::coeff_t y, int ind)
Definition: sparse_monomials.hpp:699
Sequence of terms with reference counter.
Definition: Seq.hpp:28
void div_rem(R &q, R &a, const R &b0)
Divide a in place by b, concidering all the monomials.
Definition: sparse_monomials.hpp:554
void mul(dual< C, O > &res, const dual< C, O > &a, const dual< C, O > &b)
Definition: sparse_dual.hpp:135
T pow(const T &a, int i)
Definition: binomials.hpp:12
TMPL void diff(Polynomial &r, const Polynomial &p, int i)
Derivative of p with respect to i th variable put in r.
Definition: sparse_monomials.hpp:580
R::coeff_t & leadingcoeff(R &a)
Definition: sparse_monomials.hpp:516
const C & b
Definition: Interval_glue.hpp:25
TMPL X
Definition: polynomial_operators.hpp:148
void mul_ext_e(Polynomial &result, const Polynomial &a, const M &m)
Definition: sparse_monomials.hpp:330
static void sub(SparsePolynomial &r, const SparsePolynomial &a, const C &b)
Definition: sparse_monomials.hpp:1099
static MonomialOrdering * order()
Definition: sparse_monomials.hpp:60
const Interval & I
Definition: Interval_glue.hpp:49
Polynomial()
Definition: sparse_monomials.hpp:42
POL::const_iterator last_term(const POL &p)
Definition: sparse_monomials.hpp:543
static void add(SparsePolynomial &r, const SparsePolynomial &a, const C &b)
Definition: sparse_monomials.hpp:1079
base_t::const_reverse_iterator const_reverse_iterator
Definition: sparse_monomials.hpp:39
MP subs(unsigned var, const X &val, const MP &P)
Definition: sparse_monomials.hpp:906
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
void eval_at(R &r, const Polynomial &p, const VCT &x)
Definition: sparse_monomials.hpp:642
double gcd(const double &, const double &)
Definition: GMP.hpp:90
Definition: sparse_monomials.hpp:27
void coefficients(Seq< U > &r, const Polynomial &f, int v)
Definition: sparse_monomials.hpp:454
Virtual class of monomial ordering.
Definition: monomial_ordering.hpp:32
static void rem(SparsePolynomial &r, const SparsePolynomial &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1134
static void mul(SparsePolynomial &r, const SparsePolynomial &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1107
static void div(SparsePolynomial &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1126
#define Monomial
Definition: monomial.hpp:56
void add(dual< C, O > &res, const dual< C, O > &a, const dual< C, O > &b)
Definition: sparse_dual.hpp:105
TMPL int N(const MONOMIAL &v)
Definition: monomial_glue.hpp:60
int lvar(const R &p)
Index of the leading variable (of maximal index) of a polynomial.
Definition: sparse_monomials.hpp:473
#define REP
Definition: fatarcs.hpp:14
int degree(const R &p)
Degree of a polynomial.
Definition: sparse_monomials.hpp:487
static void add(SparsePolynomial &r, const C &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1083
base_t::const_iterator const_iterator
Definition: sparse_monomials.hpp:37
TMPL void shift(Polynomial &r, const Polynomial &p, const typename Polynomial::monom_t &m)
Multiply p by a monomial m and put the result in r.
Definition: sparse_monomials.hpp:600
base_t::value_type monom_t
Definition: sparse_monomials.hpp:34
virtual bool less(const int *m1, int s1, const int *m2, int s2) const =0
#define TMPL
Definition: sparse_monomials.hpp:11
#define SparsePolynomial
Definition: sparse_monomials.hpp:1063
#define TMPLX
Definition: sparse_monomials.hpp:12
TMPL void homogenize(Polynomial &r, const Polynomial &p, const Polynomial &v)
Definition: sparse_monomials.hpp:673
polynomial< COEFF, with< MonomialTensor > > Polynomial
Definition: solver_mv_cf.cpp:23
TMPL bool divide(const Monomial &m1, const Monomial &m2, Monomial &r)
Definition: monomial.hpp:207
size_type size() const
Definition: Seq.hpp:166
TMPL void rem(Polynomial &r, const Polynomial &a, const Polynomial &b)
Definition: sparse_monomials.hpp:446
#define Polynomial
Definition: sparse_monomials.hpp:13
OS & print_verbatim(OS &os, const Polynomial &P)
Definition: sparse_monomials.hpp:800
Polynomial(const monom_t &m)
Definition: sparse_monomials.hpp:50
base_t::value_type Monomial
Definition: sparse_monomials.hpp:35
static void sub(SparsePolynomial &r, const C &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1095
TMPL void copy(Polynomial &r, const Polynomial &a)
Copy of a in r.
Definition: sparse_monomials.hpp:613
TMPL void mul_iterator(Polynomial &r, typename Polynomial::const_iterator b, typename Polynomial::const_iterator e, const Polynomial &p)
Definition: sparse_monomials.hpp:389
static MonomialOrdering * m_order
Definition: sparse_monomials.hpp:59
C coeff_t
Definition: sparse_monomials.hpp:29
C value_type
Definition: sparse_monomials.hpp:31
static bool less(const monom_t &m1, const monom_t &m2)
Definition: sparse_monomials.hpp:62
static void add(SparsePolynomial &r, const SparsePolynomial &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1075
base_t::reverse_iterator reverse_iterator
Definition: sparse_monomials.hpp:38
C Scalar
Definition: sparse_monomials.hpp:30
bool operator==(const Polynomial &p) const
Definition: polynomial.hpp:34
TMPL Polynomial::coeff_t eval(const Polynomial &p, const typename Polynomial::coeff_t &x, const typename Polynomial::coeff_t &y)
Evaluate the polynomial p for x0=x, x1=y, and the other xi=1.
Definition: sparse_monomials.hpp:623
REP base_t
Definition: sparse_monomials.hpp:33
Definition: polynomial.hpp:37
std::string to_string(const Polynomial &P, const VARIABLES &V)
Definition: sparse_monomials.hpp:733
ZZ size(const ZZ &z)
Definition: GMPXX.hpp:67
O Order
Definition: sparse_monomials.hpp:32
TMPL POL
Definition: polynomial_dual.hpp:74
Polynomial(const C &c)
Definition: sparse_monomials.hpp:43
bool operator!=(const C &c) const
Definition: sparse_monomials.hpp:55
#define Scalar
Definition: polynomial_operators.hpp:12
Polynomial self_t
Definition: sparse_monomials.hpp:40
POL::coeff_t coeffof(const POL &p, const typename POL::monom_t &mono)
Definition: sparse_monomials.hpp:526
void div(dual< C, O > &f, const C &c)
Definition: sparse_dual.hpp:205
Polynomial P
Definition: solver_mv_cf.cpp:24
static void add(SparsePolynomial &r, const SparsePolynomial &a)
Definition: sparse_monomials.hpp:1071
static void sub(SparsePolynomial &r, const SparsePolynomial &a, const SparsePolynomial &b)
Definition: sparse_monomials.hpp:1091
POL scale(const POL &p, C a, int v)
Definition: sparse_monomials.hpp:857
static void sub(SparsePolynomial &r, const SparsePolynomial &a)
Definition: sparse_monomials.hpp:1087
void mul_ext(Polynomial &r, const Polynomial &a, const M &m)
Multiplication of a polynomial by a monomial or a scalar.
Definition: sparse_monomials.hpp:308
bool operator!=(const Polynomial &p) const
Definition: sparse_monomials.hpp:53
const C & c
Definition: Interval_glue.hpp:45
C content(const Polynomial &P)
Definition: sparse_monomials.hpp:1027
Definition: polynomial_operators.hpp:77
unsigned nbvar(const R &p)
Number of variables of a polynomial.
Definition: sparse_monomials.hpp:481
static void mul(SparsePolynomial &r, const SparsePolynomial &a, const C &b)
Definition: sparse_monomials.hpp:1111
double C
Definition: solver_mv_fatarcs.cpp:16
base_t::iterator iterator
Definition: sparse_monomials.hpp:36
static void div(SparsePolynomial &r, const SparsePolynomial &a, const C &b)
Definition: sparse_monomials.hpp:1122
OSTREAM & print(OSTREAM &os, const dual< C, O > &P, const variables &V)
Output operator.
Definition: sparse_dual.hpp:260
void assign(A &a, const B &b)
Generic definition of the assignement function.
Definition: assign.hpp:97
Monomial class.
Definition: monomial.hpp:62
OS & print_as_double(OS &os, const Polynomial &P, const VARIABLES &V)
Definition: sparse_monomials.hpp:775
Interval< T, r > max(const Interval< T, r > &a, const Interval< T, r > &b)
Definition: Interval_fcts.hpp:135
static void mul(SparsePolynomial &r, const SparsePolynomial &a)
Definition: sparse_monomials.hpp:1103
Definition: variables.hpp:65
static void div(SparsePolynomial &a, const C &c)
Definition: sparse_monomials.hpp:1130
#define CLASS
Definition: sparse_monomials.hpp:14
#define assert(expr, msg)
Definition: shared_object.hpp:57