diff --git a/include/complex.hpp b/include/complex.hpp index 8771583..f42143d 100644 --- a/include/complex.hpp +++ b/include/complex.hpp @@ -3,6 +3,8 @@ #include +#include + /*! @file complex.hpp * @brief Complex numbers and related computation */ @@ -18,30 +20,36 @@ namespace ztd //! @brief Contructor z complex(const complex& z); + inline complex& operator=(const complex& z) { real=z.real; im=z.im; return *this;} + //! @brief Complex Addition - complex& operator+=(const complex& z); + complex& operator+=(complex z); //! @brief Complex Substraction - complex& operator-=(const complex& z); + complex& operator-=(complex z); //! @brief Complex Multiplication - complex& operator*=(const complex& z); + complex& operator*=(complex z); //! @brief Complex Division - complex& operator/=(const complex& z); + complex& operator/=(complex z); + //! @brief Real part double real; //! @brief Imaginary part double im; + inline double mod() { return sqrt(real*real + im*im); } + double arg() { return atan2(real, im); } + }; //! @brief Complex Addition - inline complex operator+(const complex& z1, const complex& z2) { complex z3(z1); return z3 += z1; } + inline complex operator+(complex z1, const complex& z2) { return z1 += z2; } //! @brief Complex Substraction - inline complex operator-(const complex& z1, const complex& z2) { complex z3(z1); return z3 -= z1; } + inline complex operator-(complex z1, const complex& z2) { return z1 -= z2; } //! @brief Complex Multiplication - inline complex operator*(const complex& z1, const complex& z2) { complex z3(z1); return z3 *= z1; } + inline complex operator*(complex z1, const complex& z2) { return z1 *= z2; } //! @brief Complex Division - inline complex operator/(const complex& z1, const complex& z2) { complex z3(z1); return z3 /= z1; } + inline complex operator/(complex z1, const complex& z2) { return z1 /= z2; } //! @brief Output a+bi inline std::ostream& operator<<(std::ostream& stream, complex z) { stream << z.real << '+' << z.im << 'i'; return stream; } diff --git a/src/complex.cpp b/src/complex.cpp index c55ca57..dfafbbf 100644 --- a/src/complex.cpp +++ b/src/complex.cpp @@ -13,26 +13,26 @@ ztd::complex::complex(const ztd::complex& z) im=z.im; } -ztd::complex& ztd::complex::operator+=(const ztd::complex& z) +ztd::complex& ztd::complex::operator+=(ztd::complex z) { real += z.real; im += z.im; return *this; } -ztd::complex& ztd::complex::operator-=(const ztd::complex& z) +ztd::complex& ztd::complex::operator-=(ztd::complex z) { real -= z.real; im -= z.im; return *this; } -ztd::complex& ztd::complex::operator*=(const ztd::complex& z) +ztd::complex& ztd::complex::operator*=(ztd::complex z) { double r=real; real = real*z.real - im*z.im; im = r*z.im + im*z.real; return *this; } -ztd::complex& ztd::complex::operator/=(const ztd::complex& z) +ztd::complex& ztd::complex::operator/=(ztd::complex z) { double r=real; double div = z.real*z.real + z.im*z.im;