Complex Complex::operator / (const Complex &c) { double r = c.re() * c.re() + c.im() * c.im(); if (r==0) throw std::runtime_error("Деление на нуль"); else return Complex(((re_ * c.re() + im_ * c.im()) / r), ((im_ * c.re() - re_ * c.im()) / r)); }
Complex<T> Complex<T>::operator/ (Complex const& z) const { T temp1, temp2; if (z.re() >= z.im()) { temp1 = z.im() / z.re(); temp2 = z.re() + z.im() * temp1; return Complex( (re() + im() * temp1) / temp2, (im() - re() * temp1) / temp2 ); } else { temp1 = z.re() / z.im(); temp2 = z.re() * temp1 + z.im(); return Complex( (re() * temp1 + im()) / temp2, (im() * temp1 - re()) / temp2 ); } }
Complex Complex::operator+(const Complex &c) const{ return Complex(real + c.re(), imag + c.im()); }
Complex Complex::operator/(const Complex &c) const{//(ac+bd)/t + i(bc - ad)/t double t = c.re()*c.re() + c.im()*c.im(); return Complex( (real*c.re() + imag*c.im()) / t, (imag*c.re() - real*c.im()) / t ); }
Complex Complex::operator*(const Complex &c) const{ return Complex(real*c.re() - imag*c.im(), real*c.im() + imag*c.re()); }
Complex Complex::operator-(const Complex &c) const{ return Complex(real - c.re(), imag - c.im()); }
bool operator ==(const Complex& left, const Complex& right){ return left.re() == right.re() && left.im() == right.im(); }
Complex Complex::operator * (const Complex &c) { double real=re_ * c.re() - im_ * c.im(); double image=re_ * c.im() + im_ * c.re(); return Complex(real, image); }
Complex Complex::operator -(const Complex &c) { return Complex(re_ - c.re(), im_ - c.im()); }
Complex Complex::operator +(const Complex &c) { return Complex (re_ + c.re(), im_ + c.im()); }
Complex::Complex (const Complex &c): re_(c.re()), im_(c.im()) {}
// Comparisons bool operator== (Complex const& z) const { return re()==z.re() and im()==z.im(); }
Complex operator- (Complex const& z) const { return Complex(re()-z.re(), im()-z.im()); }
Complex<T> Complex<T>::operator* (Complex const& z) const { return Complex<T>(re()*z.re() - im()*z.im(), re()*z.im() + im()*z.re()); }