numerix_doc 0.4
/Users/mourrain/Devel/mmx/numerix/glue/glue_complex_floating.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 <basix/double.hpp>
00006 #include <numerix/complex.hpp>
00007 #include <numerix/complex_double.hpp>
00008 #include <basix/glue.hpp>
00009 
00010 #define double_literal(x) as_double (as_string (x))
00011 
00012 namespace mmx {
00013   static complex<mmx_floating>
00014   GLUE_1 (const mmx_floating &arg_1) {
00015     return complex<mmx_floating > (arg_1);
00016   }
00017   
00018   static complex<mmx_floating>
00019   GLUE_2 (const mmx_floating &arg_1, const mmx_floating &arg_2) {
00020     return complex<mmx_floating > (arg_1, arg_2);
00021   }
00022   
00023   static complex<mmx_floating>
00024   GLUE_3 (const mmx_floating &arg_1) {
00025     return complex<mmx_floating > (arg_1);
00026   }
00027   
00028   static mmx_floating
00029   GLUE_4 (const complex<mmx_floating> &arg_1) {
00030     return Re (arg_1);
00031   }
00032   
00033   static mmx_floating
00034   GLUE_5 (const complex<mmx_floating> &arg_1) {
00035     return Im (arg_1);
00036   }
00037   
00038   static complex<mmx_floating>
00039   GLUE_6 (const complex<mmx_floating> &arg_1) {
00040     return conj (arg_1);
00041   }
00042   
00043   static complex<mmx_floating>
00044   GLUE_7 (const complex<mmx_floating> &arg_1) {
00045     return times_i (arg_1);
00046   }
00047   
00048   static complex<mmx_floating>
00049   GLUE_8 (const complex<mmx_floating> &arg_1) {
00050     return over_i (arg_1);
00051   }
00052   
00053   static complex<mmx_floating>
00054   GLUE_9 (const complex<mmx_floating> &arg_1) {
00055     return -arg_1;
00056   }
00057   
00058   static complex<mmx_floating>
00059   GLUE_10 (const complex<mmx_floating> &arg_1) {
00060     return square (arg_1);
00061   }
00062   
00063   static complex<mmx_floating>
00064   GLUE_11 (const complex<mmx_floating> &arg_1, const complex<mmx_floating> &arg_2) {
00065     return arg_1 + arg_2;
00066   }
00067   
00068   static complex<mmx_floating>
00069   GLUE_12 (const complex<mmx_floating> &arg_1, const complex<mmx_floating> &arg_2) {
00070     return arg_1 - arg_2;
00071   }
00072   
00073   static complex<mmx_floating>
00074   GLUE_13 (const complex<mmx_floating> &arg_1, const complex<mmx_floating> &arg_2) {
00075     return arg_1 * arg_2;
00076   }
00077   
00078   static complex<mmx_floating>
00079   GLUE_14 (const mmx_floating &arg_1, const complex<mmx_floating> &arg_2) {
00080     return arg_1 + arg_2;
00081   }
00082   
00083   static complex<mmx_floating>
00084   GLUE_15 (const complex<mmx_floating> &arg_1, const mmx_floating &arg_2) {
00085     return arg_1 + arg_2;
00086   }
00087   
00088   static complex<mmx_floating>
00089   GLUE_16 (const mmx_floating &arg_1, const complex<mmx_floating> &arg_2) {
00090     return arg_1 - arg_2;
00091   }
00092   
00093   static complex<mmx_floating>
00094   GLUE_17 (const complex<mmx_floating> &arg_1, const mmx_floating &arg_2) {
00095     return arg_1 - arg_2;
00096   }
00097   
00098   static complex<mmx_floating>
00099   GLUE_18 (const mmx_floating &arg_1, const complex<mmx_floating> &arg_2) {
00100     return arg_1 * arg_2;
00101   }
00102   
00103   static complex<mmx_floating>
00104   GLUE_19 (const complex<mmx_floating> &arg_1, const mmx_floating &arg_2) {
00105     return arg_1 * arg_2;
00106   }
00107   
00108   static complex<mmx_floating>
00109   GLUE_20 (const complex<mmx_floating> &arg_1, const complex<mmx_floating> &arg_2) {
00110     return arg_1 / arg_2;
00111   }
00112   
00113   static complex<mmx_floating>
00114   GLUE_21 (const mmx_floating &arg_1, const complex<mmx_floating> &arg_2) {
00115     return arg_1 / arg_2;
00116   }
00117   
00118   static complex<mmx_floating>
00119   GLUE_22 (const complex<mmx_floating> &arg_1, const mmx_floating &arg_2) {
00120     return arg_1 / arg_2;
00121   }
00122   
00123   static mmx_floating
00124   GLUE_23 (const complex<mmx_floating> &arg_1) {
00125     return abs (arg_1);
00126   }
00127   
00128   static mmx_floating
00129   GLUE_24 (const complex<mmx_floating> &arg_1) {
00130     return arg (arg_1);
00131   }
00132   
00133   static complex<mmx_floating>
00134   GLUE_25 (const complex<mmx_floating> &arg_1) {
00135     return sqrt (arg_1);
00136   }
00137   
00138   static complex<mmx_floating>
00139   GLUE_26 (const complex<mmx_floating> &arg_1) {
00140     return exp (arg_1);
00141   }
00142   
00143   static complex<mmx_floating>
00144   GLUE_27 (const complex<mmx_floating> &arg_1) {
00145     return log (arg_1);
00146   }
00147   
00148   static complex<mmx_floating>
00149   GLUE_28 (const complex<mmx_floating> &arg_1, const complex<mmx_floating> &arg_2) {
00150     return pow (arg_1, arg_2);
00151   }
00152   
00153   static complex<mmx_floating>
00154   GLUE_29 (const complex<mmx_floating> &arg_1) {
00155     return cos (arg_1);
00156   }
00157   
00158   static complex<mmx_floating>
00159   GLUE_30 (const complex<mmx_floating> &arg_1) {
00160     return sin (arg_1);
00161   }
00162   
00163   static complex<mmx_floating>
00164   GLUE_31 (const complex<mmx_floating> &arg_1) {
00165     return tan (arg_1);
00166   }
00167   
00168   static complex<mmx_floating>
00169   GLUE_32 (const complex<mmx_floating> &arg_1) {
00170     return acos (arg_1);
00171   }
00172   
00173   static complex<mmx_floating>
00174   GLUE_33 (const complex<mmx_floating> &arg_1) {
00175     return asin (arg_1);
00176   }
00177   
00178   static complex<mmx_floating>
00179   GLUE_34 (const complex<mmx_floating> &arg_1) {
00180     return atan (arg_1);
00181   }
00182   
00183   static bool
00184   GLUE_35 (const complex<mmx_floating> &arg_1) {
00185     return is_finite (arg_1);
00186   }
00187   
00188   static bool
00189   GLUE_36 (const complex<mmx_floating> &arg_1) {
00190     return is_infinite (arg_1);
00191   }
00192   
00193   static bool
00194   GLUE_37 (const complex<mmx_floating> &arg_1) {
00195     return is_nan (arg_1);
00196   }
00197   
00198   static complex<mmx_floating>
00199   GLUE_38 (const complex<mmx_floating> &arg_1) {
00200     return times_infinity (arg_1);
00201   }
00202   
00203   static int
00204   GLUE_39 (const complex<mmx_floating> &arg_1) {
00205     return precision (arg_1);
00206   }
00207   
00208   static int
00209   GLUE_40 (const complex<mmx_floating> &arg_1) {
00210     return exponent (arg_1);
00211   }
00212   
00213   static double
00214   GLUE_41 (const complex<mmx_floating> &arg_1) {
00215     return magnitude (arg_1);
00216   }
00217   
00218   static complex<mmx_floating>
00219   GLUE_42 (const complex<mmx_floating> &arg_1, const int &arg_2) {
00220     return incexp2 (arg_1, arg_2);
00221   }
00222   
00223   static complex<mmx_floating>
00224   GLUE_43 (const complex<mmx_floating> &arg_1, const int &arg_2) {
00225     return decexp2 (arg_1, arg_2);
00226   }
00227   
00228   static mmx_floating
00229   GLUE_44 (const complex<mmx_floating> &arg_1) {
00230     return rounding_error (arg_1);
00231   }
00232   
00233   static mmx_floating
00234   GLUE_45 (const complex<mmx_floating> &arg_1) {
00235     return additive_error (arg_1);
00236   }
00237   
00238   static mmx_floating
00239   GLUE_46 (const complex<mmx_floating> &arg_1) {
00240     return multiplicative_error (arg_1);
00241   }
00242   
00243   static mmx_floating
00244   GLUE_47 (const complex<mmx_floating> &arg_1) {
00245     return elementary_error (arg_1);
00246   }
00247   
00248   static complex<mmx_floating>
00249   GLUE_48 (const complex<rational> &arg_1) {
00250     return as<complex<mmx_floating> > (arg_1);
00251   }
00252   
00253   static complex<generic>
00254   GLUE_49 (const complex<mmx_floating> &arg_1) {
00255     return as<complex<generic> > (arg_1);
00256   }
00257   
00258   void
00259   glue_complex_floating () {
00260     static bool done = false;
00261     if (done) return;
00262     done = true;
00263     call_glue (string ("glue_floating"));
00264     call_glue (string ("glue_complex_double"));
00265     define_type<complex<mmx_floating> > (gen (lit ("Complex"), lit ("Floating")));
00266     define ("complex", GLUE_1);
00267     define ("complex", GLUE_2);
00268     define_converter ("upgrade", GLUE_3, PENALTY_HOMOMORPHISM);
00269     define ("Re", GLUE_4);
00270     define ("Im", GLUE_5);
00271     define ("conj", GLUE_6);
00272     define ("times_i", GLUE_7);
00273     define ("over_i", GLUE_8);
00274     define ("-", GLUE_9);
00275     define ("square", GLUE_10);
00276     define ("+", GLUE_11);
00277     define ("-", GLUE_12);
00278     define ("*", GLUE_13);
00279     define ("+", GLUE_14);
00280     define ("+", GLUE_15);
00281     define ("-", GLUE_16);
00282     define ("-", GLUE_17);
00283     define ("*", GLUE_18);
00284     define ("*", GLUE_19);
00285     define ("/", GLUE_20);
00286     define ("/", GLUE_21);
00287     define ("/", GLUE_22);
00288     define ("abs", GLUE_23);
00289     define ("arg", GLUE_24);
00290     define ("sqrt", GLUE_25);
00291     define ("exp", GLUE_26);
00292     define ("log", GLUE_27);
00293     define ("^", GLUE_28);
00294     define ("cos", GLUE_29);
00295     define ("sin", GLUE_30);
00296     define ("tan", GLUE_31);
00297     define ("arccos", GLUE_32);
00298     define ("arcsin", GLUE_33);
00299     define ("arctan", GLUE_34);
00300     define ("finite?", GLUE_35);
00301     define ("infinite?", GLUE_36);
00302     define ("nan?", GLUE_37);
00303     define ("times_infinity", GLUE_38);
00304     define ("precision", GLUE_39);
00305     define ("exponent", GLUE_40);
00306     define ("magnitude", GLUE_41);
00307     define ("increase_exponent", GLUE_42);
00308     define ("decrease_exponent", GLUE_43);
00309     define ("rounding_error", GLUE_44);
00310     define ("additive_error", GLUE_45);
00311     define ("multiplicative_error", GLUE_46);
00312     define ("elementary_error", GLUE_47);
00313     define_converter (":>", GLUE_48, PENALTY_INCLUSION);
00314     define_converter (":>", GLUE_49, PENALTY_PROMOTE_GENERIC);
00315   }
00316 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines