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 }