/****************************************** * C++ Complex Numbers * Version: 1.0.9 * Author: Douglas Wilhelm Harder * Date: 2008/03/03 * * Copyright (c) 2006-2008 by Douglas Wilhelm Harder. * All rights reserved. ******************************************/ #ifndef CA_UWATERLOO_ALUMNI_DWHARDER_COMPLEX #define CA_UWATERLOO_ALUMNI_DWHARDER_COMPLEX #include #include #include template class Complex; template std::ostream & operator << ( std::ostream &, const Complex & ); template Complex operator + ( T, const Complex & ); template Complex operator + ( long, const Complex & ); template Complex operator - ( T, const Complex & ); template Complex operator - ( long, const Complex & ); template Complex operator * ( T, const Complex & ); template Complex operator * ( long, const Complex & ); template Complex operator / ( T, const Complex & ); template Complex operator / ( long, const Complex & ); template bool operator == ( T, const Complex & ); template bool operator == ( long, const Complex & ); template bool operator != ( T, const Complex & ); template bool operator != ( long, const Complex & ); template T real( const Complex & ); template T imag_i( const Complex & ); template T csgn( const Complex & ); template T abs( const Complex & ); template T norm( const Complex & ); template T abs_imag( const Complex & ); template T norm_imag( const Complex & ); template T arg( const Complex & ); template Complex imag( const Complex & ); template Complex conj( const Complex & ); template Complex signum( const Complex & ); template Complex sqr( const Complex & ); template Complex sqrt( const Complex & ); template Complex exp( const Complex & ); template Complex log( const Complex & ); template Complex log10( const Complex & ); template Complex pow( const Complex &, const Complex & ); template Complex pow( const Complex &, T ); template Complex inverse( const Complex & ); template Complex sin( const Complex & ); template Complex cos( const Complex & ); template Complex tan( const Complex & ); template Complex sec( const Complex & ); template Complex csc( const Complex & ); template Complex cot( const Complex & ); template Complex sinh( const Complex & ); template Complex cosh( const Complex & ); template Complex tanh( const Complex & ); template Complex sech( const Complex & ); template Complex csch( const Complex & ); template Complex coth( const Complex & ); template Complex asin( const Complex & ); template Complex acos( const Complex & ); template Complex atan( const Complex & ); template Complex asec( const Complex & ); template Complex acsc( const Complex & ); template Complex acot( const Complex & ); template Complex asinh( const Complex & ); template Complex acosh( const Complex & ); template Complex atanh( const Complex & ); template Complex asech( const Complex & ); template Complex acsch( const Complex & ); template Complex acoth( const Complex & ); template Complex bessel_J( int, const Complex & ); template Complex floor( const Complex & ); template Complex ceil( const Complex & ); template Complex horner( const Complex &, T *, unsigned int ); template Complex horner( const Complex &, T *, T *, unsigned int ); template Complex horner( const Complex &, Complex *, unsigned int ); template Complex horner( const Complex &, Complex *, T *, unsigned int ); template Complex horner( const Complex &, T *, Complex *, unsigned int ); template Complex horner( const Complex &, Complex *, Complex *, unsigned int ); template class Complex { private: T r, i; static char imaginary_symbol; public: static char use_symbol( char sym ); static char get_symbol(); const static Complex ZERO; const static Complex ONE; const static Complex I; const static Complex UNITS[2]; /****************************************** * Constructor and Copy Constructor ******************************************/ Complex( T, T ); Complex( T = 0.0 ); /****************************************** * Assignment Operator ******************************************/ const Complex & operator = ( T ); /****************************************** * Mutating Arithmetic Operators ******************************************/ Complex & operator += ( const Complex & ); Complex & operator -= ( const Complex & ); Complex & operator *= ( const Complex & ); Complex & operator /= ( const Complex & ); Complex & operator += ( T ); Complex & operator -= ( T ); Complex & operator *= ( T ); Complex & operator /= ( T ); Complex & operator ++(); Complex operator ++( int ); Complex & operator --(); Complex operator --( int ); /****************************************** * Real-valued Functions ******************************************/ T real() const; T operator []( int ) const; T& operator []( int ); T imag_i() const; T csgn() const; T abs() const; T norm() const; T abs_imag() const; T norm_imag() const; T arg() const; /****************************************** * Complex-valued Functions ******************************************/ Complex imag() const; Complex conj() const; Complex operator * () const; Complex signum() const; Complex sqr() const; Complex sqrt() const; /****************************************** * Boolean-valued Functions ******************************************/ bool is_imaginary() const; bool is_inf() const; bool is_nan() const; bool is_neg_inf() const; bool is_pos_inf() const; bool is_real() const; bool is_real_inf() const; bool is_zero() const; /****************************************** * Exponential and Logarithmic Functions ******************************************/ Complex exp() const; Complex log() const; Complex log10() const; Complex pow( const Complex & ) const; Complex pow( T ) const; Complex inverse() const; /****************************************** * Trigonometric and Hyperbolic Functions ******************************************/ Complex sin() const; Complex cos() const; Complex tan() const; Complex sec() const; Complex csc() const; Complex cot() const; Complex sinh() const; Complex cosh() const; Complex tanh() const; Complex sech() const; Complex csch() const; Complex coth() const; Complex asin() const; Complex acos() const; Complex atan() const; Complex asec() const; Complex acsc() const; Complex acot() const; Complex asinh() const; Complex acosh() const; Complex atanh() const; Complex asech() const; Complex acsch() const; Complex acoth() const; Complex bessel_J( int ) const; /****************************************** * Integer Functions ******************************************/ Complex ceil() const; Complex floor() const; /****************************************** * Horner's Rule ******************************************/ Complex horner( T *, unsigned int ) const; Complex horner( T *, T *, unsigned int ) const; Complex horner( Complex *, unsigned int ) const; Complex horner( Complex *, T *, unsigned int ) const; Complex horner( T *, Complex *, unsigned int ) const; Complex horner( Complex *, Complex *, unsigned int ) const; /****************************************** * Random Factories ******************************************/ static Complex random(); static Complex random_imag(); static Complex random_real(); /****************************************** * Binary Arithmetic Operators ******************************************/ Complex operator + ( const Complex & ) const; Complex operator + ( T ) const; Complex operator - ( const Complex & ) const; Complex operator - ( T ) const; Complex operator * ( const Complex & ) const; Complex operator * ( T ) const; Complex operator / ( const Complex & ) const; Complex operator / ( T ) const; /****************************************** * Unary Arithmetic Operators ******************************************/ Complex operator - () const; /****************************************** * Binary Boolean Operators ******************************************/ bool operator == ( const Complex & ) const; bool operator == ( T ) const; bool operator != ( const Complex & ) const; bool operator != ( T ) const; }; #endif