numerix_doc 0.4
|
00001 00002 #include <numerix/integer.hpp> 00003 #include <numerix/rational.hpp> 00004 #include <basix/glue.hpp> 00005 00006 namespace mmx { 00007 static rational 00008 GLUE_1 (const integer &arg_1) { 00009 return rational (arg_1); 00010 } 00011 00012 static rational 00013 GLUE_2 (const integer &arg_1, const integer &arg_2) { 00014 return rational_new (arg_1, arg_2); 00015 } 00016 00017 static rational 00018 GLUE_3 (const integer &arg_1) { 00019 return rational (arg_1); 00020 } 00021 00022 static double 00023 GLUE_4 (const rational &arg_1) { 00024 return as_double (arg_1); 00025 } 00026 00027 static rational 00028 GLUE_5 (const integer &arg_1, const integer &arg_2) { 00029 return rational_new (arg_1, arg_2); 00030 } 00031 00032 static integer 00033 GLUE_6 (const rational &arg_1) { 00034 return numerator (arg_1); 00035 } 00036 00037 static integer 00038 GLUE_7 (const rational &arg_1) { 00039 return denominator (arg_1); 00040 } 00041 00042 static rational 00043 GLUE_8 (const rational &arg_1) { 00044 return -arg_1; 00045 } 00046 00047 static rational 00048 GLUE_9 (const rational &arg_1) { 00049 return square (arg_1); 00050 } 00051 00052 static rational 00053 GLUE_10 (const rational &arg_1, const rational &arg_2) { 00054 return arg_1 + arg_2; 00055 } 00056 00057 static rational 00058 GLUE_11 (const rational &arg_1, const rational &arg_2) { 00059 return arg_1 - arg_2; 00060 } 00061 00062 static rational 00063 GLUE_12 (const rational &arg_1, const rational &arg_2) { 00064 return arg_1 * arg_2; 00065 } 00066 00067 static rational 00068 GLUE_13 (const rational &arg_1, const rational &arg_2) { 00069 return arg_1 / arg_2; 00070 } 00071 00072 static generic 00073 GLUE_14 (const integer &arg_1, const integer &arg_2) { 00074 return integer_pow (arg_1, arg_2); 00075 } 00076 00077 static rational 00078 GLUE_15 (const rational &arg_1, const integer &arg_2) { 00079 return pow (arg_1, arg_2); 00080 } 00081 00082 static rational 00083 GLUE_16 (const rational &arg_1, const rational &arg_2) { 00084 return arg_1 / arg_2; 00085 } 00086 00087 static bool 00088 GLUE_17 (const rational &arg_1, const rational &arg_2) { 00089 return divides (arg_1, arg_2); 00090 } 00091 00092 static rational 00093 GLUE_18 (const rational &arg_1, const rational &arg_2) { 00094 return gcd (arg_1, arg_2); 00095 } 00096 00097 static rational 00098 GLUE_19 (const rational &arg_1, const rational &arg_2) { 00099 return lcm (arg_1, arg_2); 00100 } 00101 00102 static bool 00103 GLUE_20 (const rational &arg_1, const rational &arg_2) { 00104 return arg_1 < arg_2; 00105 } 00106 00107 static bool 00108 GLUE_21 (const rational &arg_1, const rational &arg_2) { 00109 return arg_1 <= arg_2; 00110 } 00111 00112 static bool 00113 GLUE_22 (const rational &arg_1, const rational &arg_2) { 00114 return arg_1 > arg_2; 00115 } 00116 00117 static bool 00118 GLUE_23 (const rational &arg_1, const rational &arg_2) { 00119 return arg_1 >= arg_2; 00120 } 00121 00122 static rational 00123 GLUE_24 (const rational &arg_1) { 00124 return abs (arg_1); 00125 } 00126 00127 static rational 00128 GLUE_25 (const rational &arg_1, const rational &arg_2) { 00129 return min (arg_1, arg_2); 00130 } 00131 00132 static rational 00133 GLUE_26 (const rational &arg_1, const rational &arg_2) { 00134 return max (arg_1, arg_2); 00135 } 00136 00137 static rational 00138 GLUE_27 (const rational &arg_1) { 00139 return floor (arg_1); 00140 } 00141 00142 static rational 00143 GLUE_28 (const rational &arg_1) { 00144 return ceil (arg_1); 00145 } 00146 00147 static rational 00148 GLUE_29 (const rational &arg_1) { 00149 return trunc (arg_1); 00150 } 00151 00152 static rational 00153 GLUE_30 (const rational &arg_1) { 00154 return round (arg_1); 00155 } 00156 00157 void 00158 glue_rational () { 00159 static bool done = false; 00160 if (done) return; 00161 done = true; 00162 call_glue (string ("glue_integer")); 00163 define_type<rational > (lit ("Rational")); 00164 define ("rational", GLUE_1); 00165 define ("rational", GLUE_2); 00166 define_converter ("upgrade", GLUE_3, PENALTY_INCLUSION); 00167 define_converter ("upgrade", GLUE_4, PENALTY_INCLUSION); 00168 define ("/", GLUE_5); 00169 define ("numerator", GLUE_6); 00170 define ("denominator", GLUE_7); 00171 define ("-", GLUE_8); 00172 define ("square", GLUE_9); 00173 define ("+", GLUE_10); 00174 define ("-", GLUE_11); 00175 define ("*", GLUE_12); 00176 define ("/", GLUE_13); 00177 define ("^", GLUE_14); 00178 define ("^", GLUE_15); 00179 define ("div", GLUE_16); 00180 define ("divides?", GLUE_17); 00181 define ("gcd", GLUE_18); 00182 define ("lcm", GLUE_19); 00183 define ("<", GLUE_20); 00184 define ("<=", GLUE_21); 00185 define (">", GLUE_22); 00186 define (">=", GLUE_23); 00187 define ("abs", GLUE_24); 00188 define ("min", GLUE_25); 00189 define ("max", GLUE_26); 00190 define ("floor", GLUE_27); 00191 define ("ceil", GLUE_28); 00192 define ("trunc", GLUE_29); 00193 define ("round", GLUE_30); 00194 } 00195 }