Developer documentation

solver_uv_continued_fraction.hpp
Go to the documentation of this file.
1 /*******************************************************************
2  * This file is part of the source code of the realroot kernel.
3  * Author(s):
4  * E. Tsigaridas <et@di.uoa.gr>
5  * Department of Informatics and Telecommunications
6  * University of Athens (Greece).
7  * Modification:
8  * B. Mourrain, GALAAD, INRIA
9  * P. Dobrowolski, Warsaw University of Technology
10  ********************************************************************/
11 #ifndef realroot_solve_contfrac_hpp
12 #define realroot_solve_contfrac_hpp
13 
64 //====================================================================
65 #include <realroot/GMP.hpp>
68 #include <realroot/Seq.hpp>
69 #include <realroot/solver.hpp>
72 
73 # define TMPL template<class C, class R, class V>
74 # define SOLVER solver<C, ContFrac<R,V> >
75 //====================================================================
76 namespace mmx {
77 
78 template<class M> struct ContFrac{};
79 
80 //--------------------------------------------------------------------
81 template<class K, class B, class Extended> struct continued_fraction_isolate;
82 
83 template<class K, class B> struct continued_fraction_isolate<K, B, false_t> : public K
84 {
85  typedef typename K::integer integer;
86  typedef typename K::rational rational;
88  typedef typename K::interval_rational root_t;
89  typedef Seq<root_t> sol_t;
91 
92  static inline root_t as_root(const data& ID) {return as<root_t>(ID);}
93  static inline bool is_empty(const data& ID) {return ID.s==0;}
94  static inline bool is_good (const data& ID) {return ID.s==1;}
95  static inline integer lower_bound(const Polynomial& p) {return B::lower_bound(p);}
96 };
97 
98 template<class K, class B> struct continued_fraction_isolate<K, B, true_t> : public K
99 {
100  typedef typename K::extended_integer integer;
101  typedef typename K::extended_rational rational;
103  typedef typename K::interval_extended_rational root_t;
106 
107  static inline root_t as_root(const data& ID) {return as<root_t>(ID);}
108  static inline bool is_empty(const data& ID) {return ID.s==0;}
109  static inline bool is_good (const data& ID) {return ID.s==1;}
110  static inline integer lower_bound (const Polynomial& p) {return B::lower_bound(p);}
111 };
112 
113 template<class K, class B, class Extended> struct continued_fraction_approximate;
114 
115 template<class K, class B> struct continued_fraction_approximate<K, B, false_t> : public K
116 {
117  typedef typename K::integer integer;
118  typedef typename K::rational rational;
119  typedef typename K::interval_rational interval_rational;
121  typedef interval_rational root_t;
124 
125  static unsigned prec;
126  static inline void set_precision(unsigned n){ prec = n;}
127  static inline unsigned get_precision() { return prec; }
128 
129  static inline root_t as_root(const data& ID) { return as<root_t>(ID); }
130 
131  static inline bool is_empty(const data& ID) {return ID.s==0;}
132  static inline bool is_good (const data& ID)
133  {
134  // std::cout << __FUNCTION__ <<" "<<ID.p<<" "<<ID.s<<std::endl;
135  if(ID.s !=1)
136  return false;
137  else
138  {
139  typename data::RT N = ID.a*ID.d-ID.b*ID.c, D=ID.c*ID.d ;
140  if(D==0)
141  return false;
142  if(N<0) N = -N;
143  N<<=prec;
144  if(D<0) D = -D;
145  if(N<D)
146  return true;
147  else
148  return false;
149  }
150  }
151 
152  static inline integer lower_bound(const Polynomial& p) {return B::lower_bound(p);}
153 };
154 
155 template<class K, class B> struct continued_fraction_approximate<K, B, true_t> : public K
156 {
157  typedef typename K::extended_integer integer;
158  typedef typename K::extended_rational rational;
159  typedef typename K::interval_extended_rational interval_rational;
161  typedef interval_rational root_t;
164 
165  static unsigned prec;
166  static inline void set_precision(unsigned n){ prec = n;}
167  static inline unsigned get_precision() { return prec; }
168 
169  static inline root_t as_root(const data& ID) { return as<root_t>(ID); }
170 
171  static inline bool is_empty(const data& ID) {return ID.s==0;}
172  static inline bool is_good (const data& ID)
173  {
174  // std::cout << __FUNCTION__ <<" "<<ID.p<<" "<<ID.s<<std::endl;
175  if(ID.s !=1)
176  return false;
177  else
178  {
179  typename data::RT N = ID.a*ID.d-ID.b*ID.c, D=ID.c*ID.d ;
180  if(D==0)
181  return false;
182  if(N<0) N = -N;
183  N<<=prec;
184  if(D<0) D = -D;
185  if(N<D)
186  return true;
187  else
188  return false;
189  }
190  }
191 
192  static inline integer lower_bound(const Polynomial& p) {return B::lower_bound(p);}
193 };
194 
195 template<class K, class B> unsigned continued_fraction_approximate<K,B,false_t>::prec =
197 template<class K, class B> unsigned continued_fraction_approximate<K,B,true_t>::prec =
199 
200 template < class K >
202  typedef typename K::integer RT;
203  typedef typename K::rational FT;
204  typedef typename K::integer integer;
205  typedef typename K::rational rational;
206  typedef typename K::floating floating;
207  typedef typename K::root_t root_t;
211  typedef typename K::data data;
212 
213  static void set_precision(int prec) {K::set_precision(prec);}
214 
215  template<class poly>
216  static void
217  solve_positive(Seq<root_t>& sol, const poly& f, bool posneg) {
218  // std::cout << __FUNCTION__ << " "<<f<<" "<<posneg<<std::endl;
219 
220  typedef typename K::data IntervalData;
221 
222  IntervalData ID(1, 0, 0, 1, f, 0);
223  if (!posneg)
224  {
225  ID.a=-1;
226  for (int i = 1; i <= degree(f); i+=2) ID.p[i] *= -1;
227  }
228  ID.s = sign_variation(ID.p);
229 
230  if ( K::is_empty(ID) ) { return; }
231  if ( K::is_good(ID) ) {
232  //std::cout << "A) Sign variation: 1"<<std::endl;;
233  FT B = bound_root( f, Cauchy<FT>());
234  if ( posneg )
235  sol << root_t( FT(0), B);
236  else sol << root_t( FT(0), FT(-B));
237  return;
238  }
239 
240  solve_homography(sol,ID, poly());
241  }
242 
243  template<class output, class data_type, class poly> static void
244  solve_homography(output& sol, const data_type& ID, const poly &) {
245  // std::cout << __FUNCTION__ << " "<<ID.p<<std::endl;
246 
247  // typename data_type::Poly X(1,0,1);
248  //X[1] = RT(1); X[0]=RT(0);
249 
250  int iters = 0;
251  //const RT One(1);
252  //FT Zero(0);
253  // std::cout << "Polynomial is " << ID.p << std::endl;
254 
255  typedef data_type IntervalData;
256  std::stack< IntervalData > S;
257  S.push( ID );
258  while ( !S.empty() ) {
259  ++iters;
260  IntervalData ID = S.top();
261  S.pop();
262 
263  //std::cout << "Polynomial is " << ID.p << std::endl;
264  // Steps 3 - 4: Choose the method for computing the lower bound
265  //--------------------------------------------------------------------
266  RT a = K::lower_bound(ID.p);
267  // long k = Bd.lower_power_2( ID.p);
268  //std::cout<< "\t Lower bound is "<< a<< std::endl;
269 
270  if ( a > RT(1) ) {
271  scale(ID,a);
272  a = RT(1);
273  }
274  //--------------------------------------------------------------------
275  // Step 5 //
276  if ( a >= RT(1) ) {
277  shift(ID, a);
278  // std::cout<<"Shift by "<<a<<std::endl;
279 
280  if ( ID.p[0] == RT(0))
281  {
282  div_x(ID.p,1);
283  sol << root_t( to_FT( ID.b, ID.d), to_FT( ID.b, ID.d ));
284  }
285  ID.s = sign_variation( ID.p);
286  }
287  //int s= Kernel::init_shift(ID);
288  //--------------------------------------------------------------------
289  if ( K::is_empty(ID) )
290  continue;
291  else if( K::is_good(ID) ) {
292  sol << K::as_root(ID);
293  continue;
294  }
295  //--------------------------------------------------------------------
296  // Step 6
297  IntervalData I1;
298  shift_by_1( I1, ID);
299 
300  unsigned long r = 0;
301 
302  if (I1.p[0] == RT(0)) {
303  // std::cout << "Zero at end point"<<std::endl;;
304  sol << root_t( to_FT( I1.b, I1.d), to_FT(I1.b, I1.d) );
305  div_x(I1.p,1);
306  r = 1;
307  }
308  I1.s = sign_variation( I1.p);
309 
310  IntervalData I2;
311  I2.s = ID.s - I1.s - r;
313 
314  // std::cout <<I1.s <<" "<<I2.s<<std::endl;
315  // Step 7;
316  if ( !K::is_empty(I2) && !K::is_good(I2) ) {
317 
318  //p2 = p2( 1 / (x+1));
319  reverse( I2.p, ID.p);
320  shift_by_1(I2.p);
321 
322  if ( I2.p[0] == 0) {
323  div_x(I2.p,1);
324  }
325  I2.s = sign_variation( I2.p);
326  }
327 
328  // Step 8
329  if ( I1.s < I2.s ) {std::swap( I1, I2); }
330 
331  // Step 9
332  if ( K::is_good(I1) ) {
333  // std::cout << "C) Sign variation: 1"<<std::endl;;
334  sol << K::as_root(I1);
335  } else if ( !K::is_empty(I1) ) {
336  S.push(I1); //IntervalData( I1.a, I1.b, I1.c, I1.d, I1.p, I1.s));
337  }
338  // Step 10
339  if ( K::is_good(I2) ) {
340  // std::cout << "D) Sign variation: 1"<<std::endl;;
341  sol << K::as_root(I2);
342  } else if ( !K::is_empty(I2) ) {
343  S.push(I2); //IntervalData( I2.a, I2.b, I2.c, I2.d, I2.p, I2.s));
344  }
345  } // while
346  // std::cout << "-------------------- iters: " << iters << std::endl;
347  return;
348  }
349 
350  // solve polynomial_integer or polynomial_extended_integer
351  template < class output, class poly> inline static void
352  solve_polynomial(output& sol, const poly& f, int mult=1) {
353  // std::cout << __FUNCTION__ << " I "<<f<<std::endl;
354  Seq < root_t > isolating_intervals;
355  // Check if 0 is a root
356  int idx;
357  for (idx = 0; idx <= degree( f); ++idx) {
358  if ( f[idx] != 0 ) break;
359  }
360 
361  poly p;
362  if ( idx == 0 ) { p = f; }
363  else {
364  p= poly(1,degree(f) - idx);
365  for (int j = idx; j <= degree(f); j++)
366  p[j-idx] = f[j];
367  }
368 
369  // std::cout << "Solving: " << p << std::endl;
370  // Isolate the negative roots
371  // for (int i = 1; i <= degree(p); i+=2) p[i] *= -1;
372  solve_positive( isolating_intervals, p, false);
373  // Is 0 a root?
374  // std::cout << "ok negative" << std::endl;
375  if (idx != 0) isolating_intervals << root_t( 0, 0);
376  // for (int i = 1; i <= degree(p); i+=2) p[i] *= -1;
377  solve_positive( isolating_intervals, p, true);
378  // sort( isolating_intervals.begin(), isolating_intervals.end(), CompareFIT());
379  // std::cout << "ok positive" << std::endl;
395  // std::cout << "now p: " << p << ", #nr: " << isolating_intervals.size() << std::endl;
396 
397  // std::cout << "Done...." << std::endl;
398  for (unsigned i = 0 ; i < isolating_intervals.size(); ++i)
399  {sol << isolating_intervals[i];}
400  // return sol;
401  }
402 
403  template < class output> inline static void
404  solve(output& sol, const polynomial_integer& f) {
405  solve_polynomial(sol, f);
406  }
407 
408  template < class output> inline static void
409  solve(output& sol, const polynomial_rational& f) {
410  // std::cout << __FUNCTION__ << " R "<<f<<std::endl;
411  solve_polynomial(sol, univariate::numer<polynomial_integer> (f));
412  }
413 
414  template < class output> inline static void
415  solve(output& sol, const polynomial_floating& f) {
416  // std::cout << __FUNCTION__ << " R "<<f<<std::endl;
417  polynomial_rational p(rational(0),degree(f));
418 
419  for(int i=0;i<degree(f)+1;i++) {
420  p[i] = as<rational>(f[i]);
421  }
422  //solve_polynomial(sol,p);
423  solve_polynomial(sol, univariate::numer<polynomial_integer> (p));
424  }
425 
426 };
427 
428 //--------------------------------------------------------------------
429 template<class C, class Extended> struct solver_approximate_traits;
430 
431 template<class C>
433  typedef typename texp::kernelof<C>::T K;
437  typedef typename K::interval_rational interval_t;
438 };
439 
440 template<class C>
442  typedef typename texp::kernelof<C>::T K;
446  typedef typename K::interval_extended_rational interval_t;
447 };
448 
449 template<class C>
451  typedef typename is_extended<C>::T Extended;
453  typedef typename Traits::K K;
454  typedef typename Traits::base_t base_t;
455  typedef typename Traits::interval_t interval_t;
458  typedef typename base_t::polynomial_rational polynomial_rational;
459  typedef typename base_t::polynomial_floating polynomial_floating;
460 
461  static inline void set_precision(unsigned p) {
463  }
464 
465  template < class output > inline static void
466  solve(output& sol, const polynomial_integer& f) {
467  base_t::solve(sol, f);
468  }
469 
470  template < class output > inline
471  static void solve(output& sol, const polynomial_rational& f) {
472  base_t::solve(sol, f);
473  }
474 
475  template < class output > inline static void
476  solve(output& sol, const polynomial_floating& f) {
477  base_t::solve(sol, f);
478  }
479 
480  template < class output > inline static void
481  solve(output& sol, const polynomial_integer& f, int prec) {
482  base_t::set_precision(prec);
483  solve(sol, f);
484  base_t::set_precision(solver_default_precision);
485  }
486 
487  template <class output> inline static void
488  solve(output& sol, const polynomial_integer& f,
489  const typename K::rational& u, const typename K::rational& v) {
490  typedef typename K::integer integer;
491  integer
492  a= numerator(v),
493  b= numerator(u),
494  c= denominator(v),
495  d= denominator(u);
497  as_interval_data(a,b,c,d,f);
498  base_t::solve_homography(sol,D,polynomial_integer());
499  }
500 
501  template <class output> inline static void
502  solve(output& sol, const polynomial_rational& f,
503  const typename K::rational& u, const typename K::rational& v) {
504  solve(sol, univariate::numer<polynomial_integer>(f), u, v);
505  }
506 
507 
508 };
509 
510 //====================================================================
511 template<class C, class Extended> struct solver_isolate_traits;
512 
513 template<class C>
515  typedef typename texp::kernelof<C>::T K;
519  typedef typename K::interval_rational interval_t;
520 };
521 
522 template<class C>
524  typedef typename texp::kernelof<C>::T K;
528  typedef typename K::interval_extended_rational interval_t;
529 };
530 
531 template<class C>
533  typedef typename is_extended<C>::T Extended;
535  typedef typename Traits::base_t base_t;
536  typedef typename Traits::interval_t interval_t;
538 
539  template < class output, class POL> inline static void
540  solve(output& sol, const POL& f) {
541  base_t::solve(sol,f);
542  }
543 };
544 
545 //---------------------------------------------------------------------
546 template<class POL, class M>
547 typename solver<typename POL::Scalar, ContFrac<M> >::Solutions
548 solve (const POL& p, const ContFrac<M>& slv) {
549  typedef typename POL::Scalar Scalar;
550  typedef solver<Scalar, ContFrac<M> > Solver;
551  typedef typename solver<Scalar, ContFrac<M> >::Solutions Solutions;
552  Solutions sol;
553  Solver::solve(sol,p);
554  return sol;
555 }
556 
557 //---------------------------------------------------------------------
558 template<class POL, class M, class B>
559 typename solver<typename POL::Scalar, ContFrac<M> >::Solutions
560 solve (const POL& p, const ContFrac<M>& slv, const B& b1, const B& b2) {
561  typedef solver<B, ContFrac<M> > Solver;
562  typedef typename solver<B, ContFrac<M> >::Solutions Solutions;
563  Solutions sol;
564  Solver::solve(sol,p,b1,b2);
565  return sol;
566 }
567 //--------------------------------------------------------------------
568 
569 } //namespace mmx
570 //====================================================================
571 # undef TMPL
572 # undef SOLVER
573 //====================================================================
574 #endif // _realroot_solve_contfrac_hpp_
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:108
K::rational rational
Definition: solver_uv_continued_fraction.hpp:205
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:131
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:94
K::root_t root_t
Definition: solver_uv_continued_fraction.hpp:207
K::interval_rational interval_rational
Definition: solver_uv_continued_fraction.hpp:119
static void solve(output &sol, const POL &f)
Definition: solver_uv_continued_fraction.hpp:540
Cauchy bound.
Definition: univariate_bounds.hpp:163
texp::rationalof< C >::T to_FT(const C &a, const C &b)
Definition: contfrac_intervaldata.hpp:93
void div_x(POL &p, int k)
Definition: contfrac_intervaldata.hpp:8
Sequence of terms with reference counter.
Definition: Seq.hpp:28
static unsigned get_precision()
Definition: solver_uv_continued_fraction.hpp:127
const C & b
Definition: Interval_glue.hpp:25
K::rational FT
Definition: solver_uv_continued_fraction.hpp:203
static void set_precision(int prec)
Definition: solver_uv_continued_fraction.hpp:213
Definition: univariate_bounds.hpp:409
dynamic_exp< E >::degree_t degree(const dynamic_exp< E > &t)
Definition: dynamicexp.hpp:191
structure defining a the empty list
Definition: texp_bool.hpp:11
Traits::interval_t interval_t
Definition: solver_uv_continued_fraction.hpp:536
is_extended< C >::T Extended
Definition: solver_uv_continued_fraction.hpp:451
void shift(IntervalData< RT, Poly > &ID, const RT &a)
Definition: contfrac_intervaldata.hpp:257
static void solve_homography(output &sol, const data_type &ID, const poly &)
Definition: solver_uv_continued_fraction.hpp:244
static Solutions solve(const POL &p)
Definition: solver.hpp:75
K::interval_extended_rational root_t
Definition: solver_uv_continued_fraction.hpp:103
Definition: solver_uv_continued_fraction.hpp:81
Definition: solver_uv_continued_fraction.hpp:78
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:90
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
void scale(IntervalData< RT, Poly > &ID, const RT &a)
Definition: contfrac_intervaldata.hpp:221
base_t::polynomial_floating polynomial_floating
Definition: solver_uv_continued_fraction.hpp:459
static void solve(output &sol, const polynomial_integer &f, int prec)
Definition: solver_uv_continued_fraction.hpp:481
FT bound_root(const POLY &p, const Cauchy< FT > &m)
Definition: univariate_bounds.hpp:325
polynomial< rational, with< MonomialTensor > > polynomial_rational
Definition: solver_uv_continued_fraction.hpp:209
K::interval_rational interval_t
Definition: solver_uv_continued_fraction.hpp:519
Seq< interval_t > Solutions
Definition: solver_uv_continued_fraction.hpp:456
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:172
static void set_precision(unsigned n)
Definition: solver_uv_continued_fraction.hpp:126
RT a
Definition: contfrac_intervaldata.hpp:22
interval_rational root_t
Definition: solver_uv_continued_fraction.hpp:121
Traits::K K
Definition: solver_uv_continued_fraction.hpp:453
base_t::polynomial_rational polynomial_rational
Definition: solver_uv_continued_fraction.hpp:458
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:169
void reverse(Poly &R, const Poly &P)
Definition: contfrac_intervaldata.hpp:139
static void solve_positive(Seq< root_t > &sol, const poly &f, bool posneg)
Definition: solver_uv_continued_fraction.hpp:217
TMPL int N(const MONOMIAL &v)
Definition: monomial_glue.hpp:60
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:163
K::integer integer
Definition: solver_uv_continued_fraction.hpp:85
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:162
Seq< typename ContFrac< NT, LB >::root_t > solve(const typename ContFrac< NT >::Poly &f, ContFrac< NT, LB >)
Definition: contfrac.hpp:164
base_t::Polynomial polynomial_integer
Definition: solver_uv_continued_fraction.hpp:457
static unsigned prec
Definition: solver_uv_continued_fraction.hpp:125
static unsigned get_precision()
Definition: solver_uv_continued_fraction.hpp:167
static void set_precision(unsigned n)
Definition: solver_uv_continued_fraction.hpp:166
RT b
Definition: contfrac_intervaldata.hpp:22
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:105
K::Polynomial polynomial_integer
Definition: solver_uv_continued_fraction.hpp:208
static void solve(output &sol, const polynomial_rational &f)
Definition: solver_uv_continued_fraction.hpp:409
Traits::base_t base_t
Definition: solver_uv_continued_fraction.hpp:535
RT c
Definition: contfrac_intervaldata.hpp:22
continued_fraction_subdivision< continued_fraction_isolate< K, AkritasBound< typename K::integer >, false_t > > base_t
Definition: solver_uv_continued_fraction.hpp:518
K::interval_rational interval_t
Definition: solver_uv_continued_fraction.hpp:437
K::extended_rational rational
Definition: solver_uv_continued_fraction.hpp:158
static void solve(output &sol, const polynomial_floating &f)
Definition: solver_uv_continued_fraction.hpp:476
static unsigned prec
Definition: solver_uv_continued_fraction.hpp:165
Definition: contfrac_intervaldata.hpp:17
K::interval_extended_rational interval_t
Definition: solver_uv_continued_fraction.hpp:528
K::interval_extended_rational interval_rational
Definition: solver_uv_continued_fraction.hpp:159
unsigned long s
Definition: contfrac_intervaldata.hpp:24
polynomial< floating, with< MonomialTensor > > polynomial_floating
Definition: solver_uv_continued_fraction.hpp:210
interval_rational root_t
Definition: solver_uv_continued_fraction.hpp:161
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:152
static void solve(output &sol, const polynomial_rational &f, const typename K::rational &u, const typename K::rational &v)
Definition: solver_uv_continued_fraction.hpp:502
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:102
Seq< interval_t > Solutions
Definition: solver_uv_continued_fraction.hpp:537
polynomial< COEFF, with< MonomialTensor > > Polynomial
Definition: solver_mv_cf.cpp:23
static void set_precision(unsigned p)
Definition: solver_uv_continued_fraction.hpp:461
Definition: solver.hpp:95
size_type size() const
Definition: Seq.hpp:166
K::integer integer
Definition: solver_uv_continued_fraction.hpp:117
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:104
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:515
structure defining a positive answer
Definition: texp_bool.hpp:7
Definition: solver_uv_continued_fraction.hpp:201
IntervalData< integer, Polynomial > data
Definition: solver_uv_continued_fraction.hpp:123
K::rational rational
Definition: solver_uv_continued_fraction.hpp:118
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:122
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:129
ZZ numerator(const QQ &a)
Definition: GMPXX.hpp:95
K::floating floating
Definition: solver_uv_continued_fraction.hpp:206
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:442
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:524
K::interval_rational root_t
Definition: solver_uv_continued_fraction.hpp:88
RT d
Definition: contfrac_intervaldata.hpp:22
IntervalData< RT, Poly > as_interval_data(const RT &a, const RT &b, const RT &c, const RT &d, const Poly &f)
Definition: contfrac_intervaldata.hpp:43
Definition: solver_uv_continued_fraction.hpp:429
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:93
Definition: solver.hpp:68
K::integer RT
Definition: solver_uv_continued_fraction.hpp:202
void shift_by_1(Poly &R, const Poly &P)
Definition: contfrac_intervaldata.hpp:168
solver_approximate_traits< C, Extended > Traits
Definition: solver_uv_continued_fraction.hpp:452
solver_isolate_traits< C, Extended > Traits
Definition: solver_uv_continued_fraction.hpp:534
static void solve_polynomial(output &sol, const poly &f, int mult=1)
Definition: solver_uv_continued_fraction.hpp:352
Definition: polynomial.hpp:37
TMPL POL
Definition: polynomial_dual.hpp:74
static void solve(output &sol, const polynomial_integer &f)
Definition: solver_uv_continued_fraction.hpp:466
Seq< root_t > sol_t
Definition: solver_uv_continued_fraction.hpp:89
continued_fraction_subdivision< continued_fraction_isolate< K, AkritasBound< typename K::extended_integer >, true_t > > base_t
Definition: solver_uv_continued_fraction.hpp:527
K::extended_rational rational
Definition: solver_uv_continued_fraction.hpp:101
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:109
Traits::interval_t interval_t
Definition: solver_uv_continued_fraction.hpp:455
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:192
ZZ denominator(const QQ &a)
Definition: GMPXX.hpp:96
#define Scalar
Definition: polynomial_operators.hpp:12
K::rational rational
Definition: solver_uv_continued_fraction.hpp:86
K::extended_integer integer
Definition: solver_uv_continued_fraction.hpp:100
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:160
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:107
Traits::base_t base_t
Definition: solver_uv_continued_fraction.hpp:454
K::extended_integer integer
Definition: solver_uv_continued_fraction.hpp:157
Definition: solver_uv_continued_fraction.hpp:113
solver< typename POL::Scalar, ContFrac< M > >::Solutions solve(const POL &p, const ContFrac< M > &slv, const B &b1, const B &b2)
Definition: solver_uv_continued_fraction.hpp:560
K::interval_extended_rational interval_t
Definition: solver_uv_continued_fraction.hpp:446
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:110
const C & c
Definition: Interval_glue.hpp:45
static bool is_good(const data &ID)
Definition: solver_uv_continued_fraction.hpp:132
Poly p
Definition: contfrac_intervaldata.hpp:23
double C
Definition: solver_mv_fatarcs.cpp:16
structure defining a negative answer
Definition: texp_bool.hpp:9
unsigned sign_variation(Iterator b, Iterator e)
Definition: sign_variation.hpp:27
static void solve(output &sol, const polynomial_integer &f, const typename K::rational &u, const typename K::rational &v)
Definition: solver_uv_continued_fraction.hpp:488
continued_fraction_subdivision< continued_fraction_approximate< K, AkritasBound< typename K::integer >, false_t > > base_t
Definition: solver_uv_continued_fraction.hpp:436
#define solver_default_precision
Definition: solver.hpp:59
is_extended< C >::T Extended
Definition: solver_uv_continued_fraction.hpp:533
static integer lower_bound(const Polynomial &p)
Definition: solver_uv_continued_fraction.hpp:95
Definition: solver.hpp:91
void reverse_shift_homography(IntervalData< RT, Poly > &I2, const IntervalData< RT, Poly > &ID)
Definition: contfrac_intervaldata.hpp:276
continued_fraction_subdivision< continued_fraction_approximate< K, AkritasBound< typename K::extended_integer >, true_t > > base_t
Definition: solver_uv_continued_fraction.hpp:445
Definition: solver_uv_continued_fraction.hpp:511
static void solve(output &sol, const polynomial_rational &f)
Definition: solver_uv_continued_fraction.hpp:471
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:87
K::integer integer
Definition: solver_uv_continued_fraction.hpp:204
RT_ RT
Definition: contfrac_intervaldata.hpp:19
Definition: array.hpp:12
static bool is_empty(const data &ID)
Definition: solver_uv_continued_fraction.hpp:171
K::data data
Definition: solver_uv_continued_fraction.hpp:211
texp::kernelof< C >::T K
Definition: solver_uv_continued_fraction.hpp:433
static void solve(output &sol, const polynomial_floating &f)
Definition: solver_uv_continued_fraction.hpp:415
static void solve(output &sol, const polynomial_integer &f)
Definition: solver_uv_continued_fraction.hpp:404
static root_t as_root(const data &ID)
Definition: solver_uv_continued_fraction.hpp:92
polynomial< integer, with< MonomialTensor > > Polynomial
Definition: solver_uv_continued_fraction.hpp:120
Home