8#ifndef _TCMPLX_H_INCLUDED_
9#define _TCMPLX_H_INCLUDED_
52template <
class T>
class cmplx
64 cmplx(
const cmplx<T>& c)
66 explicit cmplx(cmplx<long long>& c)
93 cmplx<T>& operator= (
const int y)
100 cmplx<T>& operator+= (
const cmplx<T>& y);
101 cmplx<T> operator+ (
const cmplx<T>& y)
const;
102 cmplx<T>& operator-= (
const cmplx<T>& y);
103 cmplx<T> operator- (
const cmplx<T>& y)
const;
105 cmplx<T>& operator*= (
const cmplx<T>& y)
108 re=x.re*y.re-x.im*y.im;
109 im=x.re*y.im+x.im*y.re;
113 template <
class P> cmplx<P> operator* (
const cmplx<P>& y)
const
116 z.re=re*y.re-im*y.im;
117 z.im=re*y.im+im*y.re;
120 cmplx<T>& operator/= (
const cmplx<T>& y);
121 cmplx<T> operator/ (
const cmplx<T>& y)
const;
122 cmplx<T> operator- (
void)
const;
124 cmplx<T>& operator>>= (
const int y)
132 cmplx<T> operator>> (
const int y)
const
139 cmplx<T>& operator<<= (
const int y)
153 bool operator== (
const cmplx<T>& y)
const
155 return ((re==y.re)&&(im==y.im));
158 bool operator!= (
const cmplx<T>& y)
const
160 return ((re!=y.re)||(im!=y.im));
163 cmplx<T> conjg ()
const;
165 void real (
const T& Re);
167 void imag (
const T& Im);
183template <
class T> cmplx<T>& cmplx<T>::operator+= (
const cmplx<T>& y)
190template <
class T> cmplx<T> cmplx<T>::operator+ (
const cmplx<T>& y)
const
197template <
class T> cmplx<T>& cmplx<T>::operator-= (
const cmplx<T>& y)
204template <
class T> cmplx<T> cmplx<T>::operator- (
const cmplx<T>& y)
const
211template <
class T> cmplx<T> cmplx<T>::operator- (
void)
const
219template <
class T> cmplx<T>& cmplx<T>::operator/=(
const cmplx<T>& y)
232 T denum=y.re*y.re+y.im*y.im;
239template <
class T> cmplx<T> cmplx<T>::operator/ (
const cmplx<T>& y)
const
252template <
class T> cmplx<T> cmplx<T>::conjg()
const
259template <
class T> T cmplx<T>::real()
const
261template <
class T>
void cmplx<T>::real(
const T& Re)
263template <
class T> T cmplx<T>::imag()
const
265template <
class T>
void cmplx<T>::imag(
const T& Im)
290template <
class T>
double abs2(
const cmplx<T>& x)
292 return (
double)(x.re*x.re+x.im*x.im);
295template <
class T,
class T2>
void abs2(
const cmplx<T>& x, T2 &res)
297 res =(T2)(x.re*x.re+x.im*x.im);
300template <
class T>
double abs(
const cmplx<T>& x)
302 return (
double)(sqrt(x.re*x.re+x.im*x.im));
305template <
class T> cmplx<T> exp(
const cmplx<T> &arg)
310 Res.re=ExpRe*cos(arg.im);
311 Res.im=ExpRe*sin(arg.im);
__INLINE__ ostream & operator<<(ostream &s, mtr< unsigned char > &mtr)
Definition: nmtlio.h:64