realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/glue/glue_solver_univariate_rational.cpp
Go to the documentation of this file.
00001 
00002 #include <numerix/integer.hpp>
00003 #include <numerix/rational.hpp>
00004 #include <numerix/floating.hpp>
00005 #include <numerix/kernel.hpp>
00006 #include <realroot/Interval_glue.hpp>
00007 #include <basix/int.hpp>
00008 #include <basix/vector.hpp>
00009 #include <basix/port.hpp>
00010 #include <realroot/polynomial.hpp>
00011 #include <realroot/polynomial_glue.hpp>
00012 #include <realroot/polynomial_sparse_glue.hpp>
00013 #include <realroot/polynomial_tensor_glue.hpp>
00014 #include <realroot/solver_univariate_glue.hpp>
00015 #include <basix/glue.hpp>
00016 
00017 #define set_of_generic set_of(generic)
00018 #define set_of_double set_of(double)
00019 #define set_of_integer set_of(integer)
00020 #define set_of_rational set_of(rational)
00021 #define set_of_bigfloat set_of(bigfloat)
00022 #define set_of_complex_bigfloat set_of(complex_bigfloat)
00023 #define int_literal(x) as_int (as_string (x))
00024 ;
00025 namespace mmx {
00026   inline long int bit_size(const rational& z) {return std::max(bit_size(numerator(z)), bit_size(denominator(z))); }
00027 }
00028 
00029 
00030 namespace mmx {
00031   static vector<generic>
00032   GLUE_1 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00033     return solver_univariate_contfrac (arg_1);
00034   }
00035   
00036   static vector<generic>
00037   GLUE_2 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const int &arg_2) {
00038     return solver_univariate_contfrac_prec (arg_1, arg_2);
00039   }
00040   
00041   static vector<generic>
00042   GLUE_3 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const interval<rational> &arg_2) {
00043     return solver_univariate_contfrac (arg_1, arg_2);
00044   }
00045   
00046   static vector<generic>
00047   GLUE_4 (const ring<rational, MonomialTensor>::Polynomial &arg_1) {
00048     return solver_univariate_contfrac_approx (arg_1);
00049   }
00050   
00051   static vector<generic>
00052   GLUE_5 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const int &arg_2) {
00053     return solver_univariate_contfrac_approx_prec (arg_1, arg_2);
00054   }
00055   
00056   static interval<mmx_floating>
00057   GLUE_6 (const ring<rational, MonomialTensor>::Polynomial &arg_1, const interval<mmx_floating> &arg_2) {
00058     return solver_univariate_newton (arg_1, arg_2);
00059   }
00060   
00061   void
00062   glue_solver_univariate_rational () {
00063     static bool done = false;
00064     if (done) return;
00065     done = true;
00066     call_glue (string ("glue_kernel"));
00067     call_glue (string ("glue_interval"));
00068     call_glue (string ("glue_polynomial_tensor_rational"));
00069     define ("solve", GLUE_1);
00070     define ("solve", GLUE_2);
00071     define ("solve", GLUE_3);
00072     define ("solve_approx", GLUE_4);
00073     define ("solve_approx", GLUE_5);
00074     define ("solve_newton", GLUE_6);
00075   }
00076 }