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 }