home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DRWIN101.ZIP / CPLXUTIL.H < prev    next >
C/C++ Source or Header  |  1991-01-11  |  2KB  |  83 lines

  1. #ifndef __CPLXUTIL_H
  2. #define __CPLXUTIL_H
  3.  
  4. #include <math.h>
  5.  
  6.  
  7. typedef struct {
  8.   double r;
  9.   double i;
  10. } CPLX;
  11.  
  12. #define CADD(x,y,z) {     \
  13.   z.r=x.r+y.r;            \
  14.   z.i=x.i+y.i;            \
  15. }
  16.  
  17. #define CSUB(x,y,z) {     \
  18.   z.r=x.r-y.r;            \
  19.   z.i=x.i-y.i;            \
  20. }
  21.  
  22. #define CMUL(x,y,z) {          \
  23.   __cplx_tmp1=x.r*y.r-x.i*y.i; \
  24.   z.i=x.r*y.i+x.i*y.r;         \
  25.   z.r=__cplx_tmp1;             \
  26. }
  27.  
  28. #define CDIV(x,y,z) {          \
  29.   __cplx_tmp2=y.r*y.r+y.i*y.i; \
  30.   __cplx_tmp1=x.r*y.r+x.i*y.i; \
  31.   z.i=(x.i*y.r-x.r*y.i)/__cplx_tmp2; \
  32.   z.r=__cplx_tmp1/__cplx_tmp2; \
  33. }
  34.  
  35. #define CCONJ(x) x.i=-x.i
  36.  
  37. #define CEXP(x,z) {       \
  38.   __cplx_cos=cos(x.i);    \
  39.   __cplx_sin=sin(x.i);    \
  40.   __cplx_expp=exp(x.r);   \
  41.   z.r=__cplx_expp*__cplx_cos; \
  42.   z.i=__cplx_expp*__cplx_sin; \
  43. }
  44.  
  45.  
  46. #define CCOS(x,z) {       \
  47.   __cplx_cos=cos(x.r);    \
  48.   __cplx_sin=sin(x.r);    \
  49.   __cplx_expm=exp(-x.i);  \
  50.   __cplx_expp=exp(x.i);   \
  51.   z.r=(__cplx_cos/2.0)*(__cplx_expm+__cplx_expp); \
  52.   z.i=(__cplx_sin/2.0)*(__cplx_expm-__cplx_expp); \
  53. }
  54.  
  55. #define CSIN(x,z) {       \
  56.   __cplx_cos=cos(x.r);    \
  57.   __cplx_sin=sin(x.r);    \
  58.   __cplx_expm=exp(-x.i);  \
  59.   __cplx_expp=exp(x.i);   \
  60.   z.r=(__cplx_sin/2.0)*(__cplx_expp+__cplx_expm); \
  61.   z.i=(__cplx_cos/2.0)*(__cplx_expp-__cplx_expm); \
  62. }
  63.  
  64.  
  65. CPLX* cadd(CPLX* x,CPLX* y,CPLX* z);
  66. CPLX* csub(CPLX* x,CPLX* y,CPLX* z);
  67. CPLX* cconj(CPLX* x);
  68. CPLX* cmul(CPLX* x,CPLX* y,CPLX* z);
  69. CPLX* cdiv(CPLX* x,CPLX* y,CPLX* z);
  70. CPLX* cexp(CPLX* x,CPLX* z);
  71. CPLX* ccos(CPLX* x,CPLX* z);
  72. CPLX* csin(CPLX* x,CPLX* z);
  73.  
  74. extern double __cplx_tmp1;
  75. extern double __cplx_tmp2;
  76. extern double __cplx_cos;
  77. extern double __cplx_sin;
  78. extern double __cplx_expm;
  79. extern double __cplx_expp;
  80.  
  81.  
  82. #endif
  83.