#ifndef __Complex_H__
#define __Complex_H__
#include <iostream>
#include <math.h>
using namespace std;
class Complex
{
private:
double Real, Imag;
public:
Complex (double Real=0, double Imag=0)
{
this->Real = Real;
this->Imag = Imag;
};
Complex & operator= (const Complex & s)
{
Real = s.Real;
Imag = s.Imag;
return *this;
};
Complex operator- () const
{
return Complex(-Real,-Imag);
};
Complex & operator= (double co)
{
Real = co;
Imag = 0;
return *this;
};
Complex operator+ (const Complex& co) const
{
Complex n;
n.Real = this->Real + co.Real;
n.Imag = this->Imag + co.Imag;
return n;
};
Complex & operator-= (Complex co)
{
Real -= co.Real;
Imag -= co.Imag;
return *this;
};
friend Complex operator- (Complex, Complex);
friend ostream & operator << (ostream & s, const Complex & c)
{
s << "(" << c.Real << "," << c.Imag << ")";
return s;
};
Complex operator/ (const Complex co)
{
return Complex((this->Real*co.Real + this->Imag*co.Imag)/(co.Real*co.Real+co.Imag*co.Imag),
(this->Imag*co.Real - this->Real*co.Imag)/(co.Real*co.Real + co.Imag*co.Imag));
};
Complex& operator/=(const Complex co){
Complex n;
n.Real = (Real*co.Real + Imag*co.Imag)/(co.Real*co.Real+co.Imag*co.Imag);
n.Imag = (Imag*co.Real - Real*co.Imag)/(co.Real*co.Real + co.Imag*co.Imag);
Real = n.Real;
Imag = n.Imag;
return *this;
};
double abs(){
return sqrt(this->Real*this->Real+this->Imag*this->Imag);
};
double phase(){
if(this->Real > 0){
return atan(1/(this->Imag/this->Real));
}
if ( this->Real < 0 ){
return atan(1/(this->Imag/this->Real))+M_PI;
}
if( this->Imag > 0 ){
return M_PI/2;
}
return -M_PI/2;
};
Complex conj(){
Complex n;
n.Real = this->Real;
n.Imag = -this->Imag;
return n;
};
};
inline Complex
operator - (Complex s1, Complex s2)
{
Complex n (s1);
return n -= s2;
}
#endif /* __Complex_H__ */
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}