home *** CD-ROM | disk | FTP | other *** search
- #ifndef __CPLXUTIL_H
- #define __CPLXUTIL_H
-
- #include <math.h>
-
-
- typedef struct {
- double r;
- double i;
- } CPLX;
-
- #define CADD(x,y,z) { \
- z.r=x.r+y.r; \
- z.i=x.i+y.i; \
- }
-
- #define CSUB(x,y,z) { \
- z.r=x.r-y.r; \
- z.i=x.i-y.i; \
- }
-
- #define CMUL(x,y,z) { \
- __cplx_tmp1=x.r*y.r-x.i*y.i; \
- z.i=x.r*y.i+x.i*y.r; \
- z.r=__cplx_tmp1; \
- }
-
- #define CDIV(x,y,z) { \
- __cplx_tmp2=y.r*y.r+y.i*y.i; \
- __cplx_tmp1=x.r*y.r+x.i*y.i; \
- z.i=(x.i*y.r-x.r*y.i)/__cplx_tmp2; \
- z.r=__cplx_tmp1/__cplx_tmp2; \
- }
-
- #define CCONJ(x) x.i=-x.i
-
- #define CEXP(x,z) { \
- __cplx_cos=cos(x.i); \
- __cplx_sin=sin(x.i); \
- __cplx_expp=exp(x.r); \
- z.r=__cplx_expp*__cplx_cos; \
- z.i=__cplx_expp*__cplx_sin; \
- }
-
-
- #define CCOS(x,z) { \
- __cplx_cos=cos(x.r); \
- __cplx_sin=sin(x.r); \
- __cplx_expm=exp(-x.i); \
- __cplx_expp=exp(x.i); \
- z.r=(__cplx_cos/2.0)*(__cplx_expm+__cplx_expp); \
- z.i=(__cplx_sin/2.0)*(__cplx_expm-__cplx_expp); \
- }
-
- #define CSIN(x,z) { \
- __cplx_cos=cos(x.r); \
- __cplx_sin=sin(x.r); \
- __cplx_expm=exp(-x.i); \
- __cplx_expp=exp(x.i); \
- z.r=(__cplx_sin/2.0)*(__cplx_expp+__cplx_expm); \
- z.i=(__cplx_cos/2.0)*(__cplx_expp-__cplx_expm); \
- }
-
-
- CPLX* cadd(CPLX* x,CPLX* y,CPLX* z);
- CPLX* csub(CPLX* x,CPLX* y,CPLX* z);
- CPLX* cconj(CPLX* x);
- CPLX* cmul(CPLX* x,CPLX* y,CPLX* z);
- CPLX* cdiv(CPLX* x,CPLX* y,CPLX* z);
- CPLX* cexp(CPLX* x,CPLX* z);
- CPLX* ccos(CPLX* x,CPLX* z);
- CPLX* csin(CPLX* x,CPLX* z);
-
- extern double __cplx_tmp1;
- extern double __cplx_tmp2;
- extern double __cplx_cos;
- extern double __cplx_sin;
- extern double __cplx_expm;
- extern double __cplx_expp;
-
-
- #endif
-