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