Added mod() and arg()
This commit is contained in:
parent
5fda20a607
commit
829e95ad8d
2 changed files with 20 additions and 12 deletions
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/*! @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; }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue