#include "Complex.h" #include #include // class implementation Complex::Complex(double re, double im) : theReal(re), theImag(im){ } double Complex::re() const { return theReal; } double Complex::im() const { return theImag; } double Complex::mag() const { return sqrt(mag2()); } double Complex::mag2() const { return theReal*theReal+theImag*theImag; } Complex Complex::coniugate() const { return Complex(re(),-im()); } Complex Complex::inverse() const { return 1./mag2()*coniugate(); } Complex operator+(const Complex& lhs, const Complex& rhs){ return Complex(lhs.re() + rhs.re(), lhs.im() + rhs.im()); } Complex operator-(const Complex& rhs){ return Complex(-rhs.re(), -rhs.im()); } Complex operator-(const Complex& lhs, const Complex& rhs){ return Complex(lhs.re() - rhs.re(), lhs.im() - rhs.im()); } Complex operator*(const Complex& lhs, const Complex& rhs){ return Complex(lhs.re()*rhs.re()-lhs.im()*rhs.im(), lhs.im()*rhs.re()+rhs.im()*lhs.re()); } Complex operator/(const Complex& lhs, const Complex& rhs){ return lhs*rhs.inverse(); } std::ostream& operator<<(std::ostream& out , const Complex& c) { out << "(" << c.re() << (c.im()>=0. ? "+i" : "-i") << fabs(c.im()) << ")"; return out; }