// // complex.h Complex Numbers // // ========================================================================= // // Open Watcom Project // // Copyright (c) 2002-2010 Open Watcom Contributors. All Rights Reserved. // Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. // // This file is automatically generated. Do not edit directly. // // ========================================================================= // #ifndef _COMPLEX_H_INCLUDED #define _COMPLEX_H_INCLUDED #ifndef _ENABLE_AUTODEPEND #pragma read_only_file; #endif #ifndef __cplusplus #if __STDC_VERSION__ < 199901L #error complex.h is for use with C++ or C99 #else #define complex _Complex /* NB. This will change, it's not C99 standard */ #define _Complex_I ((float _Complex)(_Imaginary)1.0f) #define imaginary _Imaginary #define _Imaginary_I ((_Imaginary)_Complex_I) #define I _Imaginary_I /* Trigonometric Functions */ double complex cacos(double complex z); float complex cacosf(float complex z); long double complex cacosl(long double complex z); double complex casin(double complex z); float complex casinf(float complex z); long double complex casinl(long double complex z); double complex catan(double complex z); float complex catanf(float complex z); long double complex catanl(long double complex z); double complex ccos(double complex z); float complex ccosf(float complex z); long double complex ccosl(long double complex z); double complex csin(double complex z); float complex csinf(float complex z); long double complex csinl(long double complex z); double complex ctan(double complex z); float complex ctanf(float complex z); long double complex ctanl(long double complex z); /* Hyperbolic Functions */ double complex cacosh(double complex z); float complex cacosfh(float complex z); long double complex cacoshl(long double complex z); double complex casinh(double complex z); float complex casinhf(float complex z); long double complex casinhl(long double complex z); double complex catanh(double complex z); float complex catanhf(float complex z); long double complex catanhl(long double complex z); double complex ccosh(double complex z); float complex ccosfh(float complex z); long double complex ccoshl(long double complex z); double complex csinh(double complex z); float complex csinhf(float complex z); long double complex csinhl(long double complex z); double complex ctanh(double complex z); float complex ctanhf(float complex z); long double complex ctanhl(long double complex z); /* Exponential and Logarithmic Functions */ double complex cexp(double complex z); float complex cexpf(float complex z); long double complex cexpl(long double complex z); double complex clog(double complex z); float complex clogf(float complex z); long double complex clogl(long double complex z); /* Power and Absolute-value Functions */ double cabs(double complex z); float cabsf(float complex z); long double cabsl(long double complex z); double complex cpow(double complex x, double complex y); float complex cpowf(float complex x, float complex y); long double complex cpowl(long double complex x, long double complex y); double complex csqrt(double complex z); float complex csqrtf(float complex z); long double complex csqrtl(long double complex z); /* Manipulation Functions */ double carg(double complex z); float cargf(float complex z); long double cargl(long double complex z); double cimag(double complex z); float cimagf(float complex z); long double cimagl(long double complex z); double complex conj(double complex z); float complex conjf(float complex z); long double complex conjl(long double complex z); double complex cproj(double complex z); float complex cprojf(float complex z); long double complex cprojl(long double complex z); double creal(double complex z); float crealf(float complex z); long double creall(long double complex z); #endif #else /* __cplusplus */ #if !defined(_M_IX86) #pragma library( "cplx.lib" ) #elif defined(__SW_FPC) #if defined(_M_I86) #if defined(__MEDIUM__) #pragma library ( "cplxm.lib" ) #elif defined(__COMPACT__) #pragma library ( "cplxc.lib" ) #elif defined(__LARGE__) #pragma library ( "cplxl.lib" ) #elif defined(__HUGE__) #pragma library ( "cplxh.lib" ) #else #pragma library ( "cplxs.lib" ) #endif #else #if defined(__3S__) #pragma library ( "cplx3s.lib" ) #else #pragma library ( "cplx3r.lib" ) #endif #endif #else #if defined(_M_I86) #if defined(__MEDIUM__) #pragma library ( "cplx7m.lib" ) #elif defined(__COMPACT__) #pragma library ( "cplx7c.lib" ) #elif defined(__LARGE__) #pragma library ( "cplx7l.lib" ) #elif defined(__HUGE__) #pragma library ( "cplx7h.lib" ) #else #pragma library ( "cplx7s.lib" ) #endif #else #if defined(__3S__) #pragma library ( "cplx73s.lib" ) #else #pragma library ( "cplx73r.lib" ) #endif #endif #endif #ifndef _COMDEF_H_INCLUDED #include <_comdef.h> #endif #ifndef _IOSTREAM_H_INCLUDED #include #endif #ifdef _M_IX86 #pragma pack( __push, 1 ) #else #pragma pack( __push, 8 ) #endif class _WPRTLINK Complex { double __r; double __i; public: Complex(); Complex( Complex const & ); Complex( double __real, double __imag = 0.0 ); Complex &operator = ( Complex const & ); Complex &operator = ( double ); Complex &operator += ( Complex const & ); Complex &operator += ( double ); Complex &operator -= ( Complex const & ); Complex &operator -= ( double ); Complex &operator *= ( Complex const & ); Complex &operator *= ( double ); Complex &operator /= ( Complex const & ); Complex &operator /= ( double ); Complex operator + () const; Complex operator - () const; double imag () const; double real () const; friend _WPRTLINK istream &operator >> ( istream &, Complex & ); friend _WPRTLINK ostream &operator << ( ostream &, Complex const & ); }; #pragma pack( __pop ) typedef Complex complex; // for compatibility _WPRTLINK extern Complex operator + ( Complex const &, Complex const & ); _WPRTLINK extern Complex operator + ( Complex const &, double ); _WPRTLINK extern Complex operator + ( double, Complex const & ); _WPRTLINK extern Complex operator - ( Complex const &, Complex const & ); _WPRTLINK extern Complex operator - ( Complex const &, double ); _WPRTLINK extern Complex operator - ( double, Complex const & ); _WPRTLINK extern Complex operator * ( Complex const &, Complex const & ); _WPRTLINK extern Complex operator * ( Complex const &, double ); _WPRTLINK extern Complex operator * ( double, Complex const & ); _WPRTLINK extern Complex operator / ( Complex const &, Complex const & ); _WPRTLINK extern Complex operator / ( Complex const &, double ); _WPRTLINK extern Complex operator / ( double, Complex const & ); _WPRTLINK extern int operator == ( Complex const &, Complex const & ); _WPRTLINK extern int operator == ( Complex const &, double ); _WPRTLINK extern int operator == ( double, Complex const & ); _WPRTLINK extern int operator != ( Complex const &, Complex const & ); _WPRTLINK extern int operator != ( Complex const &, double ); _WPRTLINK extern int operator != ( double, Complex const & ); _WPRTLINK extern double abs ( Complex const & ); // magnitude of vector _WPRTLINK extern Complex acos ( Complex const & ); // arccosine _WPRTLINK extern Complex acosh( Complex const & ); // hyperbolic arccosine _WPRTLINK extern double arg ( Complex const & ); // angle of vector _WPRTLINK extern Complex asin ( Complex const & ); // arcsin _WPRTLINK extern Complex asinh( Complex const & ); // hyperbolic arcsin _WPRTLINK extern Complex atan ( Complex const & ); // arctangent _WPRTLINK extern Complex atanh( Complex const & ); // hyperbolic arctangent _WPRTLINK extern Complex conj ( Complex const & ); // conjugate _WPRTLINK extern Complex cos ( Complex const & ); // cosine _WPRTLINK extern Complex cosh ( Complex const & ); // hyperbolic cosine _WPRTLINK extern Complex exp ( Complex const & ); // e raised to a power _WPRTLINK extern double imag ( Complex const & ); // imaginary part _WPRTLINK extern Complex log ( Complex const & ); // log base e _WPRTLINK extern Complex log10( Complex const & ); // log base 10 _WPRTLINK extern double norm ( Complex const & ); // square of magnitude _WPRTLINK extern Complex polar( double __mag, // polar to Complex double __angle = 0 ); _WPRTLINK extern Complex pow ( Complex const &__base, // Complex ** Complex Complex const &__power ); _WPRTLINK extern Complex pow ( Complex const &__base, // Complex ** double double __power ); _WPRTLINK extern Complex pow ( double __base, // double ** Complex Complex const &__power ); _WPRTLINK extern Complex pow ( Complex const &__base, // Complex ** int int __power ); _WPRTLINK extern double real ( Complex const & ); // real part _WPRTLINK extern Complex sin ( Complex const & ); // sin _WPRTLINK extern Complex sinh ( Complex const & ); // hyperbolic sin _WPRTLINK extern Complex sqrt ( Complex const & ); // square root _WPRTLINK extern Complex tan ( Complex const & ); // tan _WPRTLINK extern Complex tanh ( Complex const & ); // hyperbolic tangent inline Complex::Complex() { __r = 0.0; __i = 0.0; } inline Complex::Complex( Complex const &__cv ) { __r = __cv.__r; __i = __cv.__i; } inline Complex::Complex( double __real, double __imag ) { __r = __real; __i = __imag; } inline Complex &Complex::operator = ( Complex const &__cv ) { __r = __cv.__r; __i = __cv.__i; return( *this ); } inline Complex &Complex::operator = ( double __dv ) { __r = __dv; __i = 0.0; return( *this ); } inline Complex &Complex::operator += ( Complex const &__cv ) { __r += __cv.__r; __i += __cv.__i; return( *this ); } inline Complex &Complex::operator += ( double __dv ) { __r += __dv; return( *this ); } inline Complex &Complex::operator -= ( Complex const &__cv ) { __r -= __cv.__r; __i -= __cv.__i; return( *this ); } inline Complex &Complex::operator -= ( double __dv ) { __r -= __dv; return( *this ); } inline Complex &Complex::operator *= ( double __dv ) { __r *= __dv; __i *= __dv; return( *this ); } inline Complex &Complex::operator /= ( double __dv ) { __r /= __dv; __i /= __dv; return( *this ); } inline Complex operator + ( Complex const &__cv1, Complex const &__cv2 ) { return Complex( __cv1.real() + __cv2.real(), __cv1.imag() + __cv2.imag() ); } inline Complex operator + ( Complex const &__cv, double __dv ) { return Complex( __cv.real() + __dv, __cv.imag() ); } inline Complex operator + ( double __dv, Complex const &__cv ) { return Complex( __dv + __cv.real(), __cv.imag() ); } inline Complex operator - ( Complex const &__cv1, Complex const &__cv2 ) { return Complex( __cv1.real() - __cv2.real(), __cv1.imag() - __cv2.imag() ); } inline Complex operator - ( Complex const &__cv, double __dv ) { return Complex( __cv.real() - __dv, __cv.imag() ); } inline Complex operator - ( double __dv, Complex const &__cv ) { return Complex( __dv - __cv.real(), - __cv.imag() ); } inline Complex operator * ( Complex const &__cv1, Complex const &__cv2 ) { return Complex( __cv1.real()*__cv2.real() - __cv1.imag()*__cv2.imag(), __cv1.imag()*__cv2.real() + __cv1.real()*__cv2.imag() ); } inline Complex operator * ( Complex const &__cv, double __dv ) { return Complex( __cv.real() * __dv, __cv.imag() * __dv ); } inline Complex operator * ( double __dv, Complex const &__cv ) { return Complex( __dv * __cv.real(), __dv * __cv.imag() ); } inline Complex operator / ( Complex const &__cv, double __dv ) { return Complex( __cv.real() / __dv, __cv.imag() / __dv ); } inline Complex Complex::operator + () const { return( *this ); } inline Complex Complex::operator - () const { return Complex( -__r, -__i ); } inline int operator == ( Complex const &__cv1, Complex const &__cv2 ) { return( __cv1.real() == __cv2.real() && __cv1.imag() == __cv2.imag() ); } inline int operator == ( Complex const &__cv, double __dv ) { return( __cv.imag() == 0.0 && __cv.real() == __dv ); } inline int operator == ( double __dv, Complex const &__cv ) { return( __cv.imag() == 0.0 && __dv == __cv.real() ); } inline int operator != ( Complex const &__cv1, Complex const &__cv2 ) { return( __cv1.real() != __cv2.real() || __cv1.imag() != __cv2.imag() ); } inline int operator != ( Complex const &__cv, double __dv ) { return( __cv.imag() != 0.0 || __cv.real() != __dv ); } inline int operator != ( double __dv, Complex const &__cv ) { return( __cv.imag() != 0.0 || __dv != __cv.real() ); } inline Complex conj( Complex const &__cv ) { return Complex( __cv.real(), -__cv.imag() ); } inline double Complex::real() const { return( __r ); } inline double real( Complex const &__cv ) { return( __cv.real() ); } inline double Complex::imag() const { return( __i ); } inline double imag( Complex const &__cv ) { return( __cv.imag() ); } inline double norm( Complex const &__cv ) { return( __cv.real() * __cv.real() + __cv.imag() * __cv.imag() ); } #endif /* __cplusplus */ #endif