00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 namespace cxsc {
00031
00032
00033
00034
00035 inline lx_real Re(const lx_complex &a)
00036 { return a.re; }
00037
00038 inline lx_real Im(const lx_complex &a)
00039 { return a.im; }
00040
00041 inline int StagPrec(const lx_complex &a) throw()
00042 { return StagPrec(a.re); }
00043
00044 inline real expoRe(const lx_complex &a) throw()
00045 { return expo(a.re); }
00046
00047 inline real expoIm(const lx_complex &a) throw()
00048 { return expo(a.im); }
00049
00050 inline l_real lr_partRe(const lx_complex &a) throw()
00051 { return lr_part(a.re); }
00052
00053 inline l_real lr_partIm(const lx_complex &a) throw()
00054 { return lr_part(a.im); }
00055
00056 inline lx_complex & SetRe(lx_complex &a, const lx_real &b)
00057 { a.re = b; return a; }
00058 inline lx_complex & SetRe(lx_complex &a, const l_real &b)
00059 { a.re = b; return a; }
00060 inline lx_complex & SetRe(lx_complex &a, const real &b)
00061 { a.re = b; return a; }
00062
00063 inline lx_complex & SetIm(lx_complex &a, const lx_real &b)
00064 { a.im = b; return a; }
00065 inline lx_complex & SetIm(lx_complex &a, const l_real &b)
00066 { a.im = b; return a; }
00067 inline lx_complex & SetIm(lx_complex &a, const real &b)
00068 { a.im = b; return a; }
00069
00070 inline lx_complex conj(const lx_complex& a) throw()
00071 { return lx_complex(a.re, -a.im); }
00072
00073 inline bool operator ! (const lx_complex& a) throw()
00074 { return !a.re && !a.im; }
00075
00076 inline bool operator == (const lx_complex &a, const lx_complex &b)
00077 throw() { return (a.re == b.re && a.im == b.im); }
00078
00079 inline bool operator == (const lx_complex &a, const l_complex &b)
00080 throw() { return (a.re == Re(b) && a.im == Im(b)); }
00081 inline bool operator == (const lx_complex &a, const complex &b)
00082 throw() { return (a.re == Re(b) && a.im == Im(b)); }
00083 inline bool operator == (const l_complex &a, const lx_complex &b)
00084 throw() { return b == a; }
00085 inline bool operator == (const complex &a, const lx_complex &b)
00086 throw() { return (b == a); }
00087
00088 inline bool operator == (const lx_complex &a, const lx_real &b) throw()
00089 { return a.re == b && a.im == 0.0; }
00090 inline bool operator == (const lx_complex &a, const l_real &b) throw()
00091 { return a.re == b && a.im == 0.0; }
00092 inline bool operator == (const lx_complex &a, const real &b) throw()
00093 { return a.re == b && a.im == 0.0; }
00094
00095 inline bool operator == (const lx_real &a, const lx_complex &b) throw()
00096 { return a == b.re && b.im == 0.0; }
00097 inline bool operator == (const l_real &a, const lx_complex &b) throw()
00098 { return a == b.re && b.im == 0.0; }
00099 inline bool operator == (const real &a, const lx_complex &b) throw()
00100 { return a == b.re && b.im == 0.0; }
00101
00102 inline bool operator != (const lx_complex &a, const lx_complex &b) throw()
00103 { return !(a == b); }
00104
00105 inline bool operator != (const lx_complex &a, const l_complex &b) throw()
00106 { return !(a == b); }
00107 inline bool operator != (const lx_complex &a, const complex &b) throw()
00108 { return !(a == b); }
00109 inline bool operator != (const l_complex &a, const lx_complex &b) throw()
00110 { return !(a == b); }
00111 inline bool operator != (const complex &a, const lx_complex &b) throw()
00112 { return !(a == b); }
00113
00114 inline bool operator != (const lx_complex &a, const lx_real &b) throw()
00115 { return !(a == b); }
00116 inline bool operator != (const lx_complex &a, const l_real &b) throw()
00117 { return !(a == b); }
00118 inline bool operator != (const lx_complex &a, const real &b) throw()
00119 { return !(a == b); }
00120 inline bool operator != (const lx_real &a, const lx_complex &b) throw()
00121 { return !(a == b); }
00122 inline bool operator != (const l_real &a, const lx_complex &b) throw()
00123 { return !(a == b); }
00124 inline bool operator != (const real &a, const lx_complex &b) throw()
00125 { return !(a == b); }
00126
00127 inline lx_complex operator + (const lx_complex &a) throw()
00128 { return a; }
00129 inline lx_complex operator - (const lx_complex &a) throw()
00130 { return lx_complex(-a.re,-a.im); }
00131
00132 inline lx_complex operator + (const lx_complex& a, const lx_complex& b) throw()
00133 { return lx_complex(a.re+b.re,a.im+b.im); }
00134
00135 inline lx_complex operator + (const lx_complex& a, const l_complex& b) throw()
00136 { return a + lx_complex(b); }
00137 inline lx_complex operator + (const lx_complex& a, const complex& b) throw()
00138 { return a + lx_complex(b); }
00139 inline lx_complex operator + (const l_complex& a, const lx_complex& b) throw()
00140 { return lx_complex(a) + b; }
00141 inline lx_complex operator + (const complex& a, const lx_complex& b) throw()
00142 { return lx_complex(a) + b; }
00143 inline lx_complex operator + (const lx_complex& a, const lx_real& b) throw()
00144 { return lx_complex(a.re + b, Im(a)); }
00145 inline lx_complex operator + (const lx_real& a, const lx_complex& b) throw()
00146 { return lx_complex(b.re + a, Im(b)); }
00147 inline lx_complex operator + (const lx_complex& a, const l_real& b) throw()
00148 { return lx_complex(a.re + b, Im(a)); }
00149 inline lx_complex operator + (const l_real& a, const lx_complex& b) throw()
00150 { return lx_complex(b.re + a, Im(b)); }
00151 inline lx_complex operator + (const lx_complex& a, const real& b) throw()
00152 { return lx_complex(a.re + b, Im(a)); }
00153 inline lx_complex operator + (const real& a, const lx_complex& b) throw()
00154 { return lx_complex(b.re + a, Im(b)); }
00155
00156 inline lx_complex & operator +=(lx_complex& a, const lx_complex& b) throw()
00157 { return a = a+b; }
00158 inline lx_complex & operator +=(lx_complex& a, const l_complex& b) throw()
00159 { return a = a+b; }
00160 inline lx_complex & operator +=(lx_complex& a, const complex& b) throw()
00161 { return a = a+b; }
00162 inline lx_complex & operator +=(lx_complex& a, const lx_real& b) throw()
00163 { return a = a+b; }
00164 inline lx_complex & operator +=(lx_complex& a, const l_real& b) throw()
00165 { return a = a+b; }
00166 inline lx_complex & operator +=(lx_complex& a, const real& b) throw()
00167 { return a = a+b; }
00168
00169 inline lx_complex operator - (const lx_complex& a, const lx_complex& b) throw()
00170 { return a + (-b); }
00171 inline lx_complex operator - (const lx_complex& a, const l_complex& b) throw()
00172 { return a + (-b); }
00173 inline lx_complex operator - (const lx_complex& a, const complex& b) throw()
00174 { return a + (-b); }
00175 inline lx_complex operator - (const l_complex& a, const lx_complex& b) throw()
00176 { return a + (-b); }
00177 inline lx_complex operator - (const complex& a, const lx_complex& b) throw()
00178 { return a + (-b); }
00179 inline lx_complex operator - (const lx_complex& a, const lx_real& b) throw()
00180 { return a + (-b); }
00181 inline lx_complex operator - (const lx_complex& a, const l_real& b) throw()
00182 { return a + (-b); }
00183 inline lx_complex operator - (const lx_complex& a, const real& b) throw()
00184 { return a + (-b); }
00185 inline lx_complex operator - (const lx_real& a, const lx_complex& b) throw()
00186 { return a + (-b); }
00187 inline lx_complex operator - (const l_real& a, const lx_complex& b) throw()
00188 { return a + (-b); }
00189 inline lx_complex operator - (const real& a, const lx_complex& b) throw()
00190 { return a + (-b); }
00191
00192 inline lx_complex & operator -=(lx_complex& a, const lx_complex& b) throw()
00193 { return a = a-b; }
00194 inline lx_complex & operator -=(lx_complex& a, const l_complex& b) throw()
00195 { return a = a-b; }
00196 inline lx_complex & operator -=(lx_complex& a, const complex& b) throw()
00197 { return a = a-b; }
00198 inline lx_complex & operator -=(lx_complex& a, const lx_real& b) throw()
00199 { return a = a-b; }
00200 inline lx_complex & operator -=(lx_complex& a, const l_real& b) throw()
00201 { return a = a-b; }
00202 inline lx_complex & operator -=(lx_complex& a, const real& b) throw()
00203 { return a = a-b; }
00204
00205
00206 inline lx_complex operator * (const lx_complex& a, const lx_complex& b) throw()
00207 {
00208 lx_real x,y;
00209
00210 x = a.re*b.re - a.im*b.im;
00211 y = a.im*b.re + a.re*b.im;
00212
00213 return lx_complex(x,y);
00214 }
00215 inline lx_complex operator * (const lx_complex& a, const l_complex& b) throw()
00216 { return a*lx_complex(b); }
00217 inline lx_complex operator * (const lx_complex& a, const complex& b) throw()
00218 { return a*lx_complex(b); }
00219 inline lx_complex operator * (const l_complex& a, const lx_complex& b) throw()
00220 { return lx_complex(a)*b; }
00221 inline lx_complex operator * (const complex& a, const lx_complex& b) throw()
00222 { return lx_complex(a)*b; }
00223 inline lx_complex operator * (const lx_complex& a, const lx_real& b) throw()
00224 { return a*lx_complex(b); }
00225 inline lx_complex operator * (const lx_complex& a, const l_real& b) throw()
00226 { return a*lx_complex(b); }
00227 inline lx_complex operator * (const lx_complex& a, const real& b) throw()
00228 { return a*lx_complex(b); }
00229 inline lx_complex operator * (const lx_real& a, const lx_complex& b) throw()
00230 { return lx_complex(a)*b; }
00231 inline lx_complex operator * (const l_real& a, const lx_complex& b) throw()
00232 { return lx_complex(a)*b; }
00233 inline lx_complex operator * (const real& a, const lx_complex& b) throw()
00234 { return lx_complex(a)*b; }
00235
00236 inline lx_complex & operator *=(lx_complex& a, const lx_complex& b) throw()
00237 { return a = a*b; }
00238 inline lx_complex & operator *=(lx_complex& a, const l_complex& b) throw()
00239 { return a = a*b; }
00240 inline lx_complex & operator *=(lx_complex& a, const complex& b) throw()
00241 { return a = a*b; }
00242 inline lx_complex & operator *=(lx_complex& a, const lx_real& b) throw()
00243 { return a = a*b; }
00244 inline lx_complex & operator *=(lx_complex& a, const l_real& b) throw()
00245 { return a = a*b; }
00246 inline lx_complex & operator *=(lx_complex& a, const real& b) throw()
00247 { return a = a*b; }
00248
00249
00250 inline lx_complex operator / (const lx_complex& a, const lx_complex& b) throw()
00251 {
00252 lx_real x,y,Ne;
00253
00254 Ne = b.re*b.re + b.im*b.im;
00255 x = (a.re*b.re + a.im*b.im) / Ne;
00256 y = (a.im*b.re - a.re*b.im) / Ne;
00257 return lx_complex(x,y);
00258 }
00259 inline lx_complex operator / (const lx_complex& a, const l_complex& b) throw()
00260 { return a/lx_complex(b); }
00261 inline lx_complex operator / (const lx_complex& a, const complex& b) throw()
00262 { return a/lx_complex(b); }
00263 inline lx_complex operator / (const l_complex& a, const lx_complex& b) throw()
00264 { return lx_complex(a)/b; }
00265 inline lx_complex operator / (const complex& a, const lx_complex& b) throw()
00266 { return lx_complex(a)/b; }
00267 inline lx_complex operator / (const lx_complex& a, const lx_real& b) throw()
00268 { return a/lx_complex(b); }
00269 inline lx_complex operator / (const lx_complex& a, const l_real& b) throw()
00270 { return a/lx_complex(b); }
00271 inline lx_complex operator / (const lx_complex& a, const real& b) throw()
00272 { return a/lx_complex(b); }
00273 inline lx_complex operator / (const lx_real& a, const lx_complex& b) throw()
00274 { return lx_complex(a)/b; }
00275 inline lx_complex operator / (const l_real& a, const lx_complex& b) throw()
00276 { return lx_complex(a)/b; }
00277 inline lx_complex operator / (const real& a, const lx_complex& b) throw()
00278 { return lx_complex(a)/b; }
00279
00280 inline lx_complex & operator /=(lx_complex& a, const lx_complex& b) throw()
00281 { return a = a/b; }
00282 inline lx_complex & operator /=(lx_complex& a, const l_complex& b) throw()
00283 { return a = a/b; }
00284 inline lx_complex & operator /=(lx_complex& a, const complex& b) throw()
00285 { return a = a/b; }
00286 inline lx_complex & operator /=(lx_complex& a, const lx_real& b) throw()
00287 { return a = a/b; }
00288 inline lx_complex & operator /=(lx_complex& a, const l_real& b) throw()
00289 { return a = a/b; }
00290 inline lx_complex & operator /=(lx_complex& a, const real& b) throw()
00291 { return a = a/b; }
00292
00293
00294
00295 inline std::ostream& operator << (std::ostream& s, const lx_complex& a)
00296 throw()
00297
00298
00299 {
00300 s << '('
00301 << a.re
00302 << " , "
00303 << a.im
00304 << ')';
00305 return s;
00306 }
00307
00308 inline std::string & operator << (std::string &s, const lx_complex& a) throw()
00309
00310
00311 {
00312 string str;
00313 s += "(";
00314 str = "";
00315 str << a.re;
00316 s += str;
00317 s += " , ";
00318 str = "";
00319 str << a.im;
00320 s += str;
00321 s += ")";
00322 return s;
00323 }
00324
00325 }