#ifndef __COMPLEX__ #define __COMPLEX__ #ifndef __MATH #include #endif /* __MATH */ #ifndef __CPORTAB #include "cportab.h" #endif /* __CPORTAB */ /* * --------------------- Typdefinitionen --------------------------------- */ typedef struct { double re; double im; } Tcomplex; /* * --------------------- Defines ----------------------------------------- */ #define CX_CPY( d, s) {(d).re=(s).re;(d).im=(s).im;} #define CX_RE( z) ((z).re) #define CX_IM( z) ((z).im) #define CX_DEF( z, r, i) {(z).re=r;(z).im=i;} #define CX_EQ( z1, z2) (((z1).re==(z2).re) && ((z1).im==(z2).im)) #define CX_ADD( s, z1, z2) {(s).re=(z1).re+(z2).re; \ (s).im=(z1).im+(z2).im;} #define CX_SUB( d, z1, z2) {(d).re=(z1).re-(z2).re; \ (d).im=(z1).im-(z2).im;} #define CX_NEG( z) {(z).re=-(z).re;(z).im=-(z).im;} #define CX_MULT( p, z1, z2) {(p).re=(z1).re*(z2).re-(z1).im*(z2).im; \ (p).im=(z1).re*(z2).im+(z1).im*(z2).re;} #define CX_KONJ( z) ((z).im=-(z).im) #define CX_BTRGQ( z) (SQR((z).re)+SQR((z).im)) #define CX_BTRG( z) (sqrt(CX_BTRGQ(z))) #define CX_SQR( q, z) {(q).re=((z).re+(z).im)*((z).re-(z).im); \ (q).im=2*(z).re*(z).im;} /* * --------------------- Prototypen -------------------------------------- */ GLOBAL Tcomplex cx_add _((Tcomplex z1, Tcomplex z2)); GLOBAL Tcomplex cx_sub _((Tcomplex z1, Tcomplex z2)); GLOBAL Tcomplex cx_mult _((Tcomplex z1, Tcomplex z2)); GLOBAL Tcomplex cx_div _((Tcomplex z1, Tcomplex z2)); GLOBAL Tcomplex cx_konj _((Tcomplex z)); GLOBAL Tcomplex cx_sgn _((Tcomplex z)); GLOBAL Tcomplex cx_inv _((Tcomplex z)); GLOBAL Tcomplex cx_sqr _((Tcomplex z)); GLOBAL Tcomplex cx_sqrt _((Tcomplex z)); GLOBAL Tcomplex cx_npow _((Tcomplex z, LONG n)); GLOBAL double cx_btrgq _((Tcomplex z)); GLOBAL double cx_btrg _((Tcomplex z)); GLOBAL double cx_arg _((Tcomplex z)); GLOBAL Tcomplex cx_poltocart _((double b, double a)); GLOBAL void cx_riemann _((double *x1, double *x2, double *x3, Tcomplex z)); GLOBAL Tcomplex cx_criem _((double x1, double x2, double x3)); GLOBAL Tcomplex cx_exp _((Tcomplex z)); GLOBAL Tcomplex cx_ln _((Tcomplex z)); GLOBAL Tcomplex cx_sin _((Tcomplex z)); GLOBAL Tcomplex cx_cos _((Tcomplex z)); GLOBAL Tcomplex cx_tan _((Tcomplex z)); GLOBAL Tcomplex cx_sinh _((Tcomplex z)); GLOBAL Tcomplex cx_cosh _((Tcomplex z)); GLOBAL Tcomplex cx_tanh _((Tcomplex z)); GLOBAL Tcomplex cx_arcsin _((Tcomplex z)); GLOBAL Tcomplex cx_arccos _((Tcomplex z)); GLOBAL Tcomplex cx_arctan _((Tcomplex z)); GLOBAL Tcomplex cx_arsinh _((Tcomplex z)); GLOBAL Tcomplex cx_arcosh _((Tcomplex z)); GLOBAL Tcomplex cx_artanh _((Tcomplex z)); #endif /* __COMPLEX__ */