realroot_doc 0.1.1
|
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<integer, MonomialTensor>::Polynomial &arg_1) { 00033 return solver_univariate_contfrac (arg_1); 00034 } 00035 00036 static vector<generic> 00037 GLUE_2 (const ring<integer, 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<integer, 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<integer, MonomialTensor>::Polynomial &arg_1) { 00048 return solver_univariate_contfrac_approx (arg_1); 00049 } 00050 00051 static vector<generic> 00052 GLUE_5 (const ring<integer, 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<integer, 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_integer () { 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_integer")); 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 }