00001 #ifndef ComplexNumber_H
00002 #define ComplexNumber_H
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
00031
00032
00033
00034
00040 class ComplexNumber
00041 {
00042 public:
00043 ComplexNumber (void) { m_x = m_y = 0.0 ; }
00044 ComplexNumber (double x, double y) { m_x = x ; m_y = y ; }
00045
00046 const double& x (void) const { return m_x ; }
00047 const double& y (void) const { return m_y ; }
00048 double& x (void) { return m_x ; }
00049 double& y (void) { return m_y ; }
00050
00051 double inq_magnitude2 (void) const ;
00052 ComplexNumber inq_square (void) const ;
00053 ComplexNumber inq_cube (void) const ;
00054 ComplexNumber inq_inverse (void) const ;
00055
00056 const ComplexNumber& operator+= (const ComplexNumber&) ;
00057 const ComplexNumber& operator-= (const ComplexNumber&) ;
00058 ComplexNumber operator+ (const ComplexNumber&) const ;
00059 ComplexNumber operator- (const ComplexNumber&) const ;
00060 ComplexNumber operator* (const ComplexNumber&) const ;
00061
00062 private:
00064 double m_x ;
00065
00067 double m_y ;
00068 } ;
00069
00070
00073 inline double ComplexNumber::inq_magnitude2 (void) const
00074 {
00075 return m_x*m_x + m_y*m_y ;
00076 }
00077
00078
00081 inline ComplexNumber ComplexNumber::inq_square (void) const
00082 {
00083 return ComplexNumber (m_x*m_x - m_y*m_y, 2.0*m_x*m_y) ;
00084 }
00085
00086
00089 inline ComplexNumber ComplexNumber::inq_cube (void) const
00090 {
00091 double x2 = m_x*m_x ;
00092 double y2 = m_y*m_y ;
00093 return ComplexNumber (m_x*x2 - 3.0*m_x*y2, -m_y*y2 + 3.0*x2*m_y) ;
00094 }
00095
00096
00099 inline ComplexNumber ComplexNumber::inq_inverse (void) const
00100 {
00101 double a = m_x*m_x + m_y*m_y ;
00102 return ComplexNumber (m_x/a, -m_y/a) ;
00103 }
00104
00105
00108 inline const ComplexNumber& ComplexNumber::operator+= (const ComplexNumber& z)
00109 {
00110 m_x += z.m_x ;
00111 m_y += z.m_y ;
00112 return *this ;
00113 }
00114
00115
00118 inline const ComplexNumber& ComplexNumber::operator-= (const ComplexNumber& z)
00119 {
00120 m_x -= z.m_x ;
00121 m_y -= z.m_y ;
00122 return *this ;
00123 }
00124
00125
00128 inline ComplexNumber ComplexNumber::operator+ (const ComplexNumber& z) const
00129 {
00130 return ComplexNumber (m_x + z.m_x, m_y + z.m_y) ;
00131 }
00132
00133
00136 inline ComplexNumber ComplexNumber::operator- (const ComplexNumber& z) const
00137 {
00138 return ComplexNumber (m_x - z.m_x, m_y - z.m_y) ;
00139 }
00140
00141
00144 inline ComplexNumber ComplexNumber::operator* (const ComplexNumber& z) const
00145 {
00146 return ComplexNumber (m_x*z.m_x - m_y*z.m_y, m_x*z.m_y + m_y*z.m_x) ;
00147 }
00148
00149
00152 inline ComplexNumber operator* (const ComplexNumber& z, double s)
00153 {
00154 return ComplexNumber (s*z.x(), s*z.y()) ;
00155 }
00156
00157
00160 inline ComplexNumber operator* (double s, const ComplexNumber& z)
00161 {
00162 return ComplexNumber (s*z.x(), s*z.y()) ;
00163 }
00164
00165
00166
00167
00168
00169 #endif