00001
00002 #include <basix/double.hpp>
00003 #include <basix/literal.hpp>
00004 #include <basix/glue.hpp>
00005
00006 #define double_literal(x) as_double (as_string (x))
00007
00008 namespace mmx {
00009 static double
00010 GLUE_1 (const literal &arg_1) {
00011 return double_literal (arg_1);
00012 }
00013
00014 static double
00015 GLUE_2 (const int &arg_1) {
00016 return int_as_double (arg_1);
00017 }
00018
00019 static int
00020 GLUE_3 (const double &arg_1) {
00021 return as_int (arg_1);
00022 }
00023
00024 static double
00025 GLUE_4 (const string &arg_1) {
00026 return as_double (arg_1);
00027 }
00028
00029 static string
00030 GLUE_5 (const double &arg_1) {
00031 return as_string (arg_1);
00032 }
00033
00034 static double
00035 GLUE_6 (const double &arg_1, const double &arg_2) {
00036 return uniform_deviate (arg_1, arg_2);
00037 }
00038
00039 static double
00040 GLUE_7 (const double &arg_1) {
00041 return -arg_1;
00042 }
00043
00044 static double
00045 GLUE_8 (const double &arg_1) {
00046 return square (arg_1);
00047 }
00048
00049 static double
00050 GLUE_9 (const double &arg_1, const double &arg_2) {
00051 return arg_1 + arg_2;
00052 }
00053
00054 static double
00055 GLUE_10 (const double &arg_1, const double &arg_2) {
00056 return arg_1 - arg_2;
00057 }
00058
00059 static double
00060 GLUE_11 (const double &arg_1, const double &arg_2) {
00061 return arg_1 * arg_2;
00062 }
00063
00064 static double
00065 GLUE_12 (const double &arg_1, const double &arg_2) {
00066 return arg_1 / arg_2;
00067 }
00068
00069 static double
00070 GLUE_13 (const double &arg_1) {
00071 return mmx_sqrt (arg_1);
00072 }
00073
00074 static double
00075 GLUE_14 (const double &arg_1, const double &arg_2) {
00076 return mmx_pow (arg_1, arg_2);
00077 }
00078
00079 static double
00080 GLUE_15 (const double &arg_1) {
00081 return mmx_exp (arg_1);
00082 }
00083
00084 static double
00085 GLUE_16 (const double &arg_1) {
00086 return mmx_log (arg_1);
00087 }
00088
00089 static double
00090 GLUE_17 (const double &arg_1) {
00091 return mmx_cos (arg_1);
00092 }
00093
00094 static double
00095 GLUE_18 (const double &arg_1) {
00096 return mmx_sin (arg_1);
00097 }
00098
00099 static double
00100 GLUE_19 (const double &arg_1) {
00101 return mmx_tan (arg_1);
00102 }
00103
00104 static double
00105 GLUE_20 (const double &arg_1) {
00106 return mmx_acos (arg_1);
00107 }
00108
00109 static double
00110 GLUE_21 (const double &arg_1) {
00111 return mmx_asin (arg_1);
00112 }
00113
00114 static double
00115 GLUE_22 (const double &arg_1) {
00116 return mmx_atan (arg_1);
00117 }
00118
00119 static bool
00120 GLUE_23 (const double &arg_1, const double &arg_2) {
00121 return arg_1 == arg_2;
00122 }
00123
00124 static bool
00125 GLUE_24 (const double &arg_1, const double &arg_2) {
00126 return arg_1 != arg_2;
00127 }
00128
00129 static bool
00130 GLUE_25 (const double &arg_1, const double &arg_2) {
00131 return arg_1 < arg_2;
00132 }
00133
00134 static bool
00135 GLUE_26 (const double &arg_1, const double &arg_2) {
00136 return arg_1 <= arg_2;
00137 }
00138
00139 static bool
00140 GLUE_27 (const double &arg_1, const double &arg_2) {
00141 return arg_1 > arg_2;
00142 }
00143
00144 static bool
00145 GLUE_28 (const double &arg_1, const double &arg_2) {
00146 return arg_1 >= arg_2;
00147 }
00148
00149 static int
00150 GLUE_29 (const double &arg_1) {
00151 return sign (arg_1);
00152 }
00153
00154 static double
00155 GLUE_30 (const double &arg_1) {
00156 return abs (arg_1);
00157 }
00158
00159 static double
00160 GLUE_31 (const double &arg_1, const double &arg_2) {
00161 return min (arg_1, arg_2);
00162 }
00163
00164 static double
00165 GLUE_32 (const double &arg_1, const double &arg_2) {
00166 return max (arg_1, arg_2);
00167 }
00168
00169 static double
00170 GLUE_33 (const double &arg_1, const double &arg_2) {
00171 return min (arg_1, arg_2);
00172 }
00173
00174 static double
00175 GLUE_34 (const double &arg_1, const double &arg_2) {
00176 return max (arg_1, arg_2);
00177 }
00178
00179 static double
00180 GLUE_35 (const double &arg_1) {
00181 return mmx_floor (arg_1);
00182 }
00183
00184 static double
00185 GLUE_36 (const double &arg_1) {
00186 return mmx_ceil (arg_1);
00187 }
00188
00189 static double
00190 GLUE_37 (const double &arg_1) {
00191 return mmx_trunc (arg_1);
00192 }
00193
00194 static double
00195 GLUE_38 (const double &arg_1) {
00196 return mmx_round (arg_1);
00197 }
00198
00199 static bool
00200 GLUE_39 (const double &arg_1) {
00201 return is_finite (arg_1);
00202 }
00203
00204 static bool
00205 GLUE_40 (const double &arg_1) {
00206 return is_infinite (arg_1);
00207 }
00208
00209 static bool
00210 GLUE_41 (const double &arg_1) {
00211 return is_nan (arg_1);
00212 }
00213
00214 static double
00215 GLUE_42 (const double &arg_1) {
00216 return times_infinity (arg_1);
00217 }
00218
00219 static int
00220 GLUE_43 (const double &arg_1) {
00221 return precision (arg_1);
00222 }
00223
00224 static double
00225 GLUE_44 (const double &arg_1, const int &arg_2) {
00226 return change_precision (arg_1, arg_2);
00227 }
00228
00229 static double
00230 GLUE_45 (const double &arg_1) {
00231 return next_above (arg_1);
00232 }
00233
00234 static double
00235 GLUE_46 (const double &arg_1) {
00236 return next_below (arg_1);
00237 }
00238
00239 static int
00240 GLUE_47 (const double &arg_1) {
00241 return exponent (arg_1);
00242 }
00243
00244 static double
00245 GLUE_48 (const double &arg_1) {
00246 return magnitude (arg_1);
00247 }
00248
00249 static double
00250 GLUE_49 (const double &arg_1, const int &arg_2) {
00251 return incexp2 (arg_1, arg_2);
00252 }
00253
00254 static double
00255 GLUE_50 (const double &arg_1, const int &arg_2) {
00256 return decexp2 (arg_1, arg_2);
00257 }
00258
00259 static double
00260 GLUE_51 (const double &arg_1) {
00261 return rounding_error (arg_1);
00262 }
00263
00264 static double
00265 GLUE_52 (const double &arg_1) {
00266 return additive_error (arg_1);
00267 }
00268
00269 static double
00270 GLUE_53 (const double &arg_1) {
00271 return multiplicative_error (arg_1);
00272 }
00273
00274 static double
00275 GLUE_54 (const double &arg_1) {
00276 return elementary_error (arg_1);
00277 }
00278
00279 void
00280 glue_double () {
00281 static bool done = false;
00282 if (done) return;
00283 done = true;
00284 define_type<double > (lit ("Double"));
00285 define ("literal_floating", GLUE_1);
00286 define_converter ("upgrade", GLUE_2, PENALTY_INCLUSION);
00287 define ("as_int", GLUE_3);
00288 define ("as_double", GLUE_4);
00289 define ("as_string", GLUE_5);
00290 define ("uniform_deviate", GLUE_6);
00291 define ("-", GLUE_7);
00292 define ("square", GLUE_8);
00293 define ("+", GLUE_9);
00294 define ("-", GLUE_10);
00295 define ("*", GLUE_11);
00296 define ("/", GLUE_12);
00297 define ("sqrt", GLUE_13);
00298 define ("^", GLUE_14);
00299 define ("exp", GLUE_15);
00300 define ("log", GLUE_16);
00301 define ("cos", GLUE_17);
00302 define ("sin", GLUE_18);
00303 define ("tan", GLUE_19);
00304 define ("arccos", GLUE_20);
00305 define ("arcsin", GLUE_21);
00306 define ("arctan", GLUE_22);
00307 define ("=", GLUE_23);
00308 define ("!=", GLUE_24);
00309 define ("<", GLUE_25);
00310 define ("<=", GLUE_26);
00311 define (">", GLUE_27);
00312 define (">=", GLUE_28);
00313 define ("sign", GLUE_29);
00314 define ("abs", GLUE_30);
00315 define ("min", GLUE_31);
00316 define ("max", GLUE_32);
00317 define ("inf", GLUE_33);
00318 define ("sup", GLUE_34);
00319 define ("floor", GLUE_35);
00320 define ("ceil", GLUE_36);
00321 define ("trunc", GLUE_37);
00322 define ("round", GLUE_38);
00323 define ("finite?", GLUE_39);
00324 define ("infinite?", GLUE_40);
00325 define ("nan?", GLUE_41);
00326 define ("times_infinity", GLUE_42);
00327 define ("precision", GLUE_43);
00328 define ("change_precision", GLUE_44);
00329 define ("next_above", GLUE_45);
00330 define ("next_below", GLUE_46);
00331 define ("exponent", GLUE_47);
00332 define ("magnitude", GLUE_48);
00333 define ("increase_exponent", GLUE_49);
00334 define ("decrease_exponent", GLUE_50);
00335 define ("rounding_error", GLUE_51);
00336 define ("additive_error", GLUE_52);
00337 define ("multiplicative_error", GLUE_53);
00338 define ("elementary_error", GLUE_54);
00339 }
00340 }