00001 
00002 #include <basix/int.hpp>
00003 #include <basix/double.hpp>
00004 #include <numerix/interval.hpp>
00005 #include <basix/glue.hpp>
00006 
00007 #define int_literal(x) as_int (as_string (x))
00008 #define double_literal(x) as_double (as_string (x))
00009 
00010 namespace mmx {
00011   static interval<double>
00012   GLUE_1 (const double &arg_1) {
00013     return interval<double > (arg_1);
00014   }
00015   
00016   static interval<double>
00017   GLUE_2 (const double &arg_1, const double &arg_2) {
00018     return interval<double > (arg_1, arg_2);
00019   }
00020   
00021   static interval<double>
00022   GLUE_3 (const double &arg_1) {
00023     return interval<double > (arg_1);
00024   }
00025   
00026   static double
00027   GLUE_4 (const interval<double> &arg_1) {
00028     return lower (arg_1);
00029   }
00030   
00031   static double
00032   GLUE_5 (const interval<double> &arg_1) {
00033     return upper (arg_1);
00034   }
00035   
00036   static double
00037   GLUE_6 (const interval<double> &arg_1) {
00038     return center (arg_1);
00039   }
00040   
00041   static double
00042   GLUE_7 (const interval<double> &arg_1) {
00043     return radius (arg_1);
00044   }
00045   
00046   static interval<double>
00047   GLUE_8 (const interval<double> &arg_1) {
00048     return -arg_1;
00049   }
00050   
00051   static interval<double>
00052   GLUE_9 (const interval<double> &arg_1) {
00053     return square (arg_1);
00054   }
00055   
00056   static interval<double>
00057   GLUE_10 (const interval<double> &arg_1, const interval<double> &arg_2) {
00058     return arg_1 + arg_2;
00059   }
00060   
00061   static interval<double>
00062   GLUE_11 (const interval<double> &arg_1, const interval<double> &arg_2) {
00063     return arg_1 - arg_2;
00064   }
00065   
00066   static interval<double>
00067   GLUE_12 (const interval<double> &arg_1, const interval<double> &arg_2) {
00068     return arg_1 * arg_2;
00069   }
00070   
00071   static interval<double>
00072   GLUE_13 (const double &arg_1, const interval<double> &arg_2) {
00073     return arg_1 + arg_2;
00074   }
00075   
00076   static interval<double>
00077   GLUE_14 (const interval<double> &arg_1, const double &arg_2) {
00078     return arg_1 + arg_2;
00079   }
00080   
00081   static interval<double>
00082   GLUE_15 (const double &arg_1, const interval<double> &arg_2) {
00083     return arg_1 - arg_2;
00084   }
00085   
00086   static interval<double>
00087   GLUE_16 (const interval<double> &arg_1, const double &arg_2) {
00088     return arg_1 - arg_2;
00089   }
00090   
00091   static interval<double>
00092   GLUE_17 (const double &arg_1, const interval<double> &arg_2) {
00093     return arg_1 * arg_2;
00094   }
00095   
00096   static interval<double>
00097   GLUE_18 (const interval<double> &arg_1, const double &arg_2) {
00098     return arg_1 * arg_2;
00099   }
00100   
00101   static interval<double>
00102   GLUE_19 (const interval<double> &arg_1, const double &arg_2) {
00103     return arg_1 / arg_2;
00104   }
00105   
00106   static interval<double>
00107   GLUE_20 (const interval<double> &arg_1, const interval<double> &arg_2) {
00108     return arg_1 / arg_2;
00109   }
00110   
00111   static interval<double>
00112   GLUE_21 (const double &arg_1, const interval<double> &arg_2) {
00113     return arg_1 / arg_2;
00114   }
00115   
00116   static interval<double>
00117   GLUE_22 (const interval<double> &arg_1) {
00118     return sqrt (arg_1);
00119   }
00120   
00121   static interval<double>
00122   GLUE_23 (const interval<double> &arg_1) {
00123     return exp (arg_1);
00124   }
00125   
00126   static interval<double>
00127   GLUE_24 (const interval<double> &arg_1) {
00128     return log (arg_1);
00129   }
00130   
00131   static interval<double>
00132   GLUE_25 (const interval<double> &arg_1, const interval<double> &arg_2) {
00133     return pow (arg_1, arg_2);
00134   }
00135   
00136   static interval<double>
00137   GLUE_26 (const interval<double> &arg_1) {
00138     return cos (arg_1);
00139   }
00140   
00141   static interval<double>
00142   GLUE_27 (const interval<double> &arg_1) {
00143     return sin (arg_1);
00144   }
00145   
00146   static interval<double>
00147   GLUE_28 (const interval<double> &arg_1) {
00148     return tan (arg_1);
00149   }
00150   
00151   static interval<double>
00152   GLUE_29 (const interval<double> &arg_1) {
00153     return acos (arg_1);
00154   }
00155   
00156   static interval<double>
00157   GLUE_30 (const interval<double> &arg_1) {
00158     return asin (arg_1);
00159   }
00160   
00161   static interval<double>
00162   GLUE_31 (const interval<double> &arg_1) {
00163     return atan (arg_1);
00164   }
00165   
00166   static bool
00167   GLUE_32 (const interval<double> &arg_1, const interval<double> &arg_2) {
00168     return arg_1 == arg_2;
00169   }
00170   
00171   static bool
00172   GLUE_33 (const interval<double> &arg_1, const interval<double> &arg_2) {
00173     return arg_1 != arg_2;
00174   }
00175   
00176   static bool
00177   GLUE_34 (const interval<double> &arg_1, const interval<double> &arg_2) {
00178     return arg_1 < arg_2;
00179   }
00180   
00181   static bool
00182   GLUE_35 (const interval<double> &arg_1, const interval<double> &arg_2) {
00183     return arg_1 > arg_2;
00184   }
00185   
00186   static bool
00187   GLUE_36 (const interval<double> &arg_1, const interval<double> &arg_2) {
00188     return arg_1 <= arg_2;
00189   }
00190   
00191   static bool
00192   GLUE_37 (const interval<double> &arg_1, const interval<double> &arg_2) {
00193     return arg_1 >= arg_2;
00194   }
00195   
00196   static bool
00197   GLUE_38 (const interval<double> &arg_1, const double &arg_2) {
00198     return arg_1 == arg_2;
00199   }
00200   
00201   static bool
00202   GLUE_39 (const interval<double> &arg_1, const double &arg_2) {
00203     return arg_1 != arg_2;
00204   }
00205   
00206   static bool
00207   GLUE_40 (const interval<double> &arg_1, const double &arg_2) {
00208     return arg_1 < arg_2;
00209   }
00210   
00211   static bool
00212   GLUE_41 (const interval<double> &arg_1, const double &arg_2) {
00213     return arg_1 > arg_2;
00214   }
00215   
00216   static bool
00217   GLUE_42 (const interval<double> &arg_1, const double &arg_2) {
00218     return arg_1 <= arg_2;
00219   }
00220   
00221   static bool
00222   GLUE_43 (const interval<double> &arg_1, const double &arg_2) {
00223     return arg_1 >= arg_2;
00224   }
00225   
00226   static bool
00227   GLUE_44 (const double &arg_1, const interval<double> &arg_2) {
00228     return arg_1 == arg_2;
00229   }
00230   
00231   static bool
00232   GLUE_45 (const double &arg_1, const interval<double> &arg_2) {
00233     return arg_1 != arg_2;
00234   }
00235   
00236   static bool
00237   GLUE_46 (const double &arg_1, const interval<double> &arg_2) {
00238     return arg_1 < arg_2;
00239   }
00240   
00241   static bool
00242   GLUE_47 (const double &arg_1, const interval<double> &arg_2) {
00243     return arg_1 > arg_2;
00244   }
00245   
00246   static bool
00247   GLUE_48 (const double &arg_1, const interval<double> &arg_2) {
00248     return arg_1 <= arg_2;
00249   }
00250   
00251   static bool
00252   GLUE_49 (const double &arg_1, const interval<double> &arg_2) {
00253     return arg_1 >= arg_2;
00254   }
00255   
00256   static interval<double>
00257   GLUE_50 (const interval<double> &arg_1) {
00258     return abs (arg_1);
00259   }
00260   
00261   static interval<double>
00262   GLUE_51 (const interval<double> &arg_1, const interval<double> &arg_2) {
00263     return min (arg_1, arg_2);
00264   }
00265   
00266   static interval<double>
00267   GLUE_52 (const interval<double> &arg_1, const interval<double> &arg_2) {
00268     return max (arg_1, arg_2);
00269   }
00270   
00271   static interval<double>
00272   GLUE_53 (const interval<double> &arg_1, const interval<double> &arg_2) {
00273     return inf (arg_1, arg_2);
00274   }
00275   
00276   static interval<double>
00277   GLUE_54 (const interval<double> &arg_1, const interval<double> &arg_2) {
00278     return sup (arg_1, arg_2);
00279   }
00280   
00281   static interval<double>
00282   GLUE_55 (const interval<double> &arg_1) {
00283     return floor (arg_1);
00284   }
00285   
00286   static interval<double>
00287   GLUE_56 (const interval<double> &arg_1) {
00288     return ceil (arg_1);
00289   }
00290   
00291   static interval<double>
00292   GLUE_57 (const interval<double> &arg_1) {
00293     return trunc (arg_1);
00294   }
00295   
00296   static interval<double>
00297   GLUE_58 (const interval<double> &arg_1) {
00298     return round (arg_1);
00299   }
00300   
00301   static bool
00302   GLUE_59 (const interval<double> &arg_1) {
00303     return is_finite (arg_1);
00304   }
00305   
00306   static bool
00307   GLUE_60 (const interval<double> &arg_1) {
00308     return is_infinite (arg_1);
00309   }
00310   
00311   static bool
00312   GLUE_61 (const interval<double> &arg_1) {
00313     return is_nan (arg_1);
00314   }
00315   
00316   static interval<double>
00317   GLUE_62 (const interval<double> &arg_1) {
00318     return times_infinity (arg_1);
00319   }
00320   
00321   static int
00322   GLUE_63 (const interval<double> &arg_1) {
00323     return precision (arg_1);
00324   }
00325   
00326   static interval<double>
00327   GLUE_64 (const interval<double> &arg_1, const int &arg_2) {
00328     return change_precision (arg_1, arg_2);
00329   }
00330   
00331   static int
00332   GLUE_65 (const interval<double> &arg_1) {
00333     return exponent (arg_1);
00334   }
00335   
00336   static double
00337   GLUE_66 (const interval<double> &arg_1) {
00338     return magnitude (arg_1);
00339   }
00340   
00341   static interval<double>
00342   GLUE_67 (const interval<double> &arg_1, const int &arg_2) {
00343     return incexp2 (arg_1, arg_2);
00344   }
00345   
00346   static interval<double>
00347   GLUE_68 (const interval<double> &arg_1, const int &arg_2) {
00348     return decexp2 (arg_1, arg_2);
00349   }
00350   
00351   void
00352   glue_interval_double () {
00353     static bool done = false;
00354     if (done) return;
00355     done = true;
00356     call_glue (string ("glue_int"));
00357     call_glue (string ("glue_double"));
00358     define_type<interval<double> > (gen (lit ("Interval"), lit ("Double")));
00359     define ("interval", GLUE_1);
00360     define ("interval", GLUE_2);
00361     define_converter ("upgrade", GLUE_3, PENALTY_INCLUSION);
00362     define ("lower", GLUE_4);
00363     define ("upper", GLUE_5);
00364     define ("center", GLUE_6);
00365     define ("radius", GLUE_7);
00366     define ("-", GLUE_8);
00367     define ("square", GLUE_9);
00368     define ("+", GLUE_10);
00369     define ("-", GLUE_11);
00370     define ("*", GLUE_12);
00371     define ("+", GLUE_13);
00372     define ("+", GLUE_14);
00373     define ("-", GLUE_15);
00374     define ("-", GLUE_16);
00375     define ("*", GLUE_17);
00376     define ("*", GLUE_18);
00377     define ("/", GLUE_19);
00378     define ("/", GLUE_20);
00379     define ("/", GLUE_21);
00380     define ("sqrt", GLUE_22);
00381     define ("exp", GLUE_23);
00382     define ("log", GLUE_24);
00383     define ("^", GLUE_25);
00384     define ("cos", GLUE_26);
00385     define ("sin", GLUE_27);
00386     define ("tan", GLUE_28);
00387     define ("arccos", GLUE_29);
00388     define ("arcsin", GLUE_30);
00389     define ("arctan", GLUE_31);
00390     define ("=", GLUE_32);
00391     define ("!=", GLUE_33);
00392     define ("<", GLUE_34);
00393     define (">", GLUE_35);
00394     define ("<=", GLUE_36);
00395     define (">=", GLUE_37);
00396     define ("=", GLUE_38);
00397     define ("!=", GLUE_39);
00398     define ("<", GLUE_40);
00399     define (">", GLUE_41);
00400     define ("<=", GLUE_42);
00401     define (">=", GLUE_43);
00402     define ("=", GLUE_44);
00403     define ("!=", GLUE_45);
00404     define ("<", GLUE_46);
00405     define (">", GLUE_47);
00406     define ("<=", GLUE_48);
00407     define (">=", GLUE_49);
00408     define ("abs", GLUE_50);
00409     define ("min", GLUE_51);
00410     define ("max", GLUE_52);
00411     define ("inf", GLUE_53);
00412     define ("sup", GLUE_54);
00413     define ("floor", GLUE_55);
00414     define ("ceil", GLUE_56);
00415     define ("trunc", GLUE_57);
00416     define ("round", GLUE_58);
00417     define ("finite?", GLUE_59);
00418     define ("infinite?", GLUE_60);
00419     define ("nan?", GLUE_61);
00420     define ("times_infinity", GLUE_62);
00421     define ("precision", GLUE_63);
00422     define ("change_precision", GLUE_64);
00423     define ("exponent", GLUE_65);
00424     define ("magnitude", GLUE_66);
00425     define ("increase_exponent", GLUE_67);
00426     define ("decrease_exponent", GLUE_68);
00427   }
00428 }