/* -*- C++ -*- */ /************************************************************************* * Copyright(c) 1995~2005 Masaharu Goto (root-cint@cern.ch) * * For the licensing terms see the file COPYING * ************************************************************************/ // Complex.cxx #include #include "Complex.h" // メンバ関数による演算子多重定義 ////////////////////////////////// Complex& Complex::operator+=(Complex& a) { re += a.re; im += a.im; return(*this); } Complex& Complex::operator-=(Complex& a) { re -= a.re; im -= a.im; return(*this); } Complex& Complex::operator*=(Complex& a) { re = re*a.re-im*a.im; im = re*a.im+im*a.re; return(*this); } Complex& Complex::operator/=(Complex& a) { double x; x = a.re*a.re+a.im*a.im; re = (re*a.re+im*a.im)/x; im = (im*a.re-re*a.im)/x; return(*this); } // フレンド関数による演算子多重定義 //////////////////////////////// bool operator ==(Complex& a,Complex& b) { return( a.re==b.re && a.im==b.im ); } Complex operator +(Complex& a,Complex& b) { Complex c; c.re = a.re+b.re; c.im = a.im+b.im; return(c); } Complex operator -(Complex& a,Complex& b) { Complex c; c.re = a.re-b.re; c.im = a.im-b.im; return(c); } Complex operator *(Complex& a,Complex& b) { Complex c; c.re = a.re*b.re-a.im*b.im; c.im = a.re*b.im+a.im*b.re; return(c); } Complex operator /(Complex& a,Complex& b) { Complex c; double x; x = b.re*b.re+b.im*b.im; c.re = (a.re*b.re+a.im*b.im)/x; c.im = (a.im*b.re-a.re*b.im)/x; return(c); } // 入出力ストリーム演算子の多重定義 ////////////////////////////// ostream& operator <<(ostream& ios,Complex& a) { ios << "(" << a.re << "," << a.im << ")" ; return(ios); } // 算術関数の多重定義 //////////////////////////////////////////// double abs(Complex &a) { double result = sqrt(a.re*a.re+a.im*a.im); return(result); } Complex exp(Complex& a) { Complex c; double mag = exp(a.re); c.re=mag*cos(a.im); c.im=mag*sin(a.im); return(c); }