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 }