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 namespace cxsc {
00027
00028
00029
00030 inline cdotprecision::cdotprecision(const dotprecision &a,const dotprecision &b)
00031 : re(a), im(b), k(0) { re.set_k(0); im.set_k(0); }
00032
00033 inline cdotprecision::cdotprecision(const real &a,const real &b)
00034 : re(a), im(b), k(0) {}
00035
00036 inline cdotprecision::cdotprecision(const cdotprecision &a)
00037 : re(a.re), im(a.im), k(a.k) {}
00038
00039 inline cdotprecision::cdotprecision(const l_real &a, const l_real &b)
00040 : re(a), im(b), k(0) {}
00041
00042 inline cdotprecision::cdotprecision(const l_complex &a)
00043 : re(Re(_cdotprecision(a))), im(Im(_cdotprecision(a))), k(0){}
00044
00045 inline cdotprecision::cdotprecision(const real &r)
00046 : re(r), im(0), k(0) {}
00047
00048 inline cdotprecision::cdotprecision(const complex &c)
00049 : re(Re(c)),im(Im(c)), k(0) {}
00050
00051 inline cdotprecision::cdotprecision(const dotprecision &r)
00052 : re(r), im(0), k(0) { re.set_k(0); im.set_k(0); }
00053
00054 inline cdotprecision::cdotprecision(const l_real &r)
00055 : re(r), im(0), k(0) {}
00056
00057
00058
00059
00060 inline cdotprecision& cdotprecision::operator= (const real & a)
00061 {
00062 re=a;im=0; return *this;
00063 }
00064
00065 inline cdotprecision& cdotprecision::operator= (const complex & a)
00066 {
00067 re=Re(a),im=Im(a); return *this;
00068 }
00069 inline cdotprecision& cdotprecision::operator= (const dotprecision & a)
00070 {
00071 re=a;im=0; return *this;
00072 }
00073 inline cdotprecision& cdotprecision::operator= (const cdotprecision & a)
00074 {
00075 re=a.re,im=a.im; return *this;
00076 }
00077 inline cdotprecision& cdotprecision::operator= (const l_real & a)
00078 {
00079 re=a;im=0; return *this;
00080 }
00081
00082
00083
00084
00090 inline cdotprecision _cdotprecision(const dotprecision& a)
00091 {
00092 return cdotprecision (a);
00093 }
00099 inline cdotprecision _cdotprecision(const real& a)
00100 {
00101 return cdotprecision (a);
00102 }
00103
00109 inline cdotprecision _cdotprecision(const l_real& a)
00110 {
00111 return cdotprecision (a);
00112 }
00113
00119 inline cdotprecision _cdotprecision(const complex& a)
00120 {
00121 return cdotprecision (a);
00122 }
00123
00129 inline cdotprecision _cdotprecision(const dotprecision& a, const dotprecision& b)
00130 {
00131 return cdotprecision (a,b);
00132 }
00138 inline cdotprecision _cdotprecision(const real& a, const real& b)
00139 {
00140 return cdotprecision (a,b);
00141 }
00142
00148 inline cdotprecision _cdotprecision(const l_real& a, const l_real& b)
00149 {
00150 return cdotprecision (a,b);
00151 }
00152
00158 inline cdotprecision _cdotprecision(const l_complex& lc)
00159 {
00160 return cdotprecision(lc);
00161 }
00162
00163
00164
00165 inline cdotprecision operator-(const cdotprecision &a) throw()
00166 {
00167 return cdotprecision (-a.re, -a.im);
00168 }
00169 inline cdotprecision operator+(const cdotprecision &a) throw()
00170 {
00171 return a;
00172 }
00173
00174 inline cdotprecision operator+(const cdotprecision &a,const cdotprecision &b) throw()
00175 {
00176 return cdotprecision(a.re+b.re,a.im+b.im);
00177 }
00178 inline cdotprecision operator-(const cdotprecision &a,const cdotprecision &b) throw()
00179 {
00180 return cdotprecision(a.re-b.re,a.im-b.im);
00181 }
00182
00183 inline cdotprecision operator +(const cdotprecision &a,const complex &b) throw() { return cdotprecision(a.re+Re(b),a.im+Im(b)); }
00184 inline cdotprecision operator +(const complex &b,const cdotprecision &a) throw() { return cdotprecision(a.re+Re(b),a.im+Im(b)); }
00185 inline cdotprecision operator -(const cdotprecision &a,const complex &b) throw() { return cdotprecision(a.re-Re(b),a.im-Im(b)); }
00186 inline cdotprecision operator -(const complex &a,const cdotprecision &b) throw() { return cdotprecision(Re(a)-b.re,Im(a)-b.im); }
00187
00188 inline cdotprecision operator +(const cdotprecision &a,const dotprecision &b) throw() { return cdotprecision(a.re+b,a.im); }
00189 inline cdotprecision operator +(const dotprecision &b,const cdotprecision &a) throw() { return cdotprecision(a.re+b,a.im); }
00190 inline cdotprecision operator -(const cdotprecision &a,const dotprecision &b) throw() { return cdotprecision(a.re-b,a.im); }
00191 inline cdotprecision operator -(const dotprecision &a,const cdotprecision &b) throw() { return cdotprecision(a-b.re,-b.im); }
00192
00193 inline cdotprecision operator +(const cdotprecision &a,const real &b) throw() { return cdotprecision(a.re+b,a.im); }
00194 inline cdotprecision operator +(const real &b,const cdotprecision &a) throw() { return cdotprecision(a.re+b,a.im); }
00195 inline cdotprecision operator -(const cdotprecision &a,const real &b) throw() { return cdotprecision(a.re-b,a.im); }
00196 inline cdotprecision operator -(const real &a,const cdotprecision &b) throw() { return cdotprecision(a-b.re,b.im); }
00197
00198 inline cdotprecision operator +(const cdotprecision &a, const l_real &b) throw()
00199 {
00200 return cdotprecision(a.re+b,a.im);
00201 }
00202 inline cdotprecision operator +(const l_real &b, const cdotprecision &a) throw()
00203 {
00204 return cdotprecision(a.re+b,a.im);
00205 }
00206 inline cdotprecision operator -(const cdotprecision &a, const l_real &b) throw()
00207 {
00208 return cdotprecision(a.re-b,a.im);
00209 }
00210 inline cdotprecision operator -(const l_real &b, const cdotprecision &a) throw()
00211 {
00212 return cdotprecision(b-a.re,-a.im);
00213 }
00214
00215 inline cdotprecision & operator +=(cdotprecision &a,const cdotprecision &b) throw() { a.re+=b.re;a.im+=b.im; return a;}
00216 inline cdotprecision & operator +=(cdotprecision &a,const dotprecision &b) throw() { a.re+=b; return a;}
00217 inline cdotprecision & operator -=(cdotprecision &a,const cdotprecision &b) throw() { a.re-=b.re;a.im-=b.im; return a;}
00218 inline cdotprecision & operator -=(cdotprecision &a,const dotprecision &b) throw() { a.re-=b; return a;}
00219 inline cdotprecision & operator +=(cdotprecision &a,const complex &b) throw()
00220 {
00221 a.re+=Re(b);
00222 a.im+=Im(b);
00223 return a;
00224 }
00225 inline cdotprecision & operator -=(cdotprecision &a,const complex &b) throw()
00226 {
00227 a.re-=Re(b);
00228 a.im-=Im(b);
00229 return a;
00230 }
00231 inline cdotprecision & operator +=(cdotprecision &a,const real &b) throw()
00232 {
00233 a.re+=b;
00234 return a;
00235 }
00236 inline cdotprecision & operator -=(cdotprecision &a,const real &b) throw()
00237 {
00238 a.re-=b;
00239 return a;
00240 }
00241 inline cdotprecision & operator +=(cdotprecision &a,const l_real &b) throw()
00242 {
00243 a.re+=b;
00244 return a;
00245 }
00246 inline cdotprecision & operator -=(cdotprecision &a,const l_real &b) throw()
00247 {
00248 a.re-=b;
00249 return a;
00250 }
00251 inline cdotprecision & operator += (cdotprecision &cd, const l_complex &lc) throw()
00252 {
00253 cd = cd + cdotprecision(lc); return cd;
00254 }
00255 inline cdotprecision & operator -= (cdotprecision &cd, const l_complex &lc) throw()
00256 {
00257 cd = cd - cdotprecision(lc); return cd;
00258 }
00259
00260
00261 inline bool operator ==(const cdotprecision &a,const cdotprecision &b) throw() { return(a.re==b.re && a.im==b.im); }
00262 inline bool operator !=(const cdotprecision &a,const cdotprecision &b) throw() { return(a.re!=b.re || a.im!=b.im); }
00263 inline bool operator ==(const dotprecision &r,const cdotprecision &a) throw() { return(r==a.re && !a.im); }
00264 inline bool operator !=(const dotprecision &r,const cdotprecision &a) throw() { return(r!=a.re || !!a.im); }
00265 inline bool operator ==(const cdotprecision &a,const dotprecision &r) throw() { return(r==a.re && !a.im); }
00266 inline bool operator !=(const cdotprecision &a,const dotprecision &r) throw() { return(r!=a.re || !!a.im); }
00267 inline bool operator ==(const complex &c,const cdotprecision &a) throw() { return(Re(c)==a.re && Im(c)==a.im); }
00268 inline bool operator !=(const complex &c,const cdotprecision &a) throw() { return(Re(c)!=a.re || Im(c)!=a.im); }
00269 inline bool operator ==(const cdotprecision &a,const complex &c) throw() { return(Re(c)==a.re && Im(c)==a.im); }
00270 inline bool operator !=(const cdotprecision &a,const complex &c) throw() { return(Re(c)!=a.re || Im(c)!=a.im); }
00271 inline bool operator ==(const real &c,const cdotprecision &a) throw() { return(c==a.re && !a.im); }
00272 inline bool operator !=(const real &c,const cdotprecision &a) throw() { return(c!=a.re || !!a.im); }
00273 inline bool operator ==(const cdotprecision &a,const real &c) throw() { return(c==a.re && !a.im); }
00274 inline bool operator !=(const cdotprecision &a,const real &c) throw() { return(c!=a.re || !!a.im); }
00275
00276 inline bool operator ==(const l_real &c,const cdotprecision &a) throw()
00277 {
00278 return(c==a.re && !a.im);
00279 }
00280
00281 inline bool operator !=(const l_real &c,const cdotprecision &a) throw()
00282 {
00283 return(c!=a.re || !!a.im);
00284 }
00285
00286 inline bool operator ==(const cdotprecision &a,const l_real &c) throw()
00287 {
00288 return(c==a.re && !a.im);
00289 }
00290
00291 inline bool operator !=(const cdotprecision &a,const l_real &c) throw()
00292 {
00293 return(c!=a.re || !!a.im);
00294 }
00295
00296
00297 inline dotprecision & Re(cdotprecision& a)
00298 {
00299 return a.re;
00300 }
00301
00302 inline dotprecision & Im(cdotprecision& a) throw()
00303 {
00304 return a.im;
00305 }
00306
00307 inline const dotprecision & Re(const cdotprecision& a)
00308 {
00309 return a.re;
00310 }
00311
00312 inline const dotprecision & Im(const cdotprecision& a) throw()
00313 {
00314 return a.im;
00315 }
00316
00317 inline cdotprecision& SetRe (cdotprecision& a, const dotprecision& b) throw()
00318 {
00319 a.re=b;
00320 return a;
00321 }
00322
00323 inline cdotprecision& SetIm (cdotprecision& a, const dotprecision& b) throw()
00324 {
00325 a.im=b;
00326 return a;
00327 }
00328
00329 inline cdotprecision conj(const cdotprecision& a) throw()
00330 {
00331 return cdotprecision(a.re,-a.im);
00332 }
00333
00334 inline bool operator !(const cdotprecision &a) throw()
00335 {
00336 return !a.re && !a.im;
00337 }
00338
00339 inline void accumulate (cdotprecision & a, const complex & b, const real & c) throw()
00340 {
00341 accumulate(a,b,complex(c));
00342 }
00343
00344 inline void accumulate (cdotprecision & a, const real & b, const complex & c) throw()
00345 {
00346 accumulate(a,complex(b),c);
00347 }
00348
00349 inline void accumulate (cdotprecision & a, const real & b, const real & c) throw()
00350 {
00351 accumulate(a,complex(b),complex(c));
00352 }
00353
00354 }
00355