complex.h raw

   1  #ifndef _COMPLEX_H
   2  #define _COMPLEX_H
   3  
   4  #ifdef __cplusplus
   5  extern "C" {
   6  #endif
   7  
   8  #define complex _Complex
   9  #ifdef __GNUC__
  10  #define _Complex_I (__extension__ (0.0f+1.0fi))
  11  #else
  12  #define _Complex_I (0.0f+1.0fi)
  13  #endif
  14  #define I _Complex_I
  15  
  16  double complex cacos(double complex);
  17  float complex cacosf(float complex);
  18  long double complex cacosl(long double complex);
  19  
  20  double complex casin(double complex);
  21  float complex casinf(float complex);
  22  long double complex casinl(long double complex);
  23  
  24  double complex catan(double complex);
  25  float complex catanf(float complex);
  26  long double complex catanl(long double complex);
  27  
  28  double complex ccos(double complex);
  29  float complex ccosf(float complex);
  30  long double complex ccosl(long double complex);
  31  
  32  double complex csin(double complex);
  33  float complex csinf(float complex);
  34  long double complex csinl(long double complex);
  35  
  36  double complex ctan(double complex);
  37  float complex ctanf(float complex);
  38  long double complex ctanl(long double complex);
  39  
  40  double complex cacosh(double complex);
  41  float complex cacoshf(float complex);
  42  long double complex cacoshl(long double complex);
  43  
  44  double complex casinh(double complex);
  45  float complex casinhf(float complex);
  46  long double complex casinhl(long double complex);
  47  
  48  double complex catanh(double complex);
  49  float complex catanhf(float complex);
  50  long double complex catanhl(long double complex);
  51  
  52  double complex ccosh(double complex);
  53  float complex ccoshf(float complex);
  54  long double complex ccoshl(long double complex);
  55  
  56  double complex csinh(double complex);
  57  float complex csinhf(float complex);
  58  long double complex csinhl(long double complex);
  59  
  60  double complex ctanh(double complex);
  61  float complex ctanhf(float complex);
  62  long double complex ctanhl(long double complex);
  63  
  64  double complex cexp(double complex);
  65  float complex cexpf(float complex);
  66  long double complex cexpl(long double complex);
  67  
  68  double complex clog(double complex);
  69  float complex clogf(float complex);
  70  long double complex clogl(long double complex);
  71  
  72  double cabs(double complex);
  73  float cabsf(float complex);
  74  long double cabsl(long double complex);
  75  
  76  double complex cpow(double complex, double complex);
  77  float complex cpowf(float complex, float complex);
  78  long double complex cpowl(long double complex, long double complex);
  79  
  80  double complex csqrt(double complex);
  81  float complex csqrtf(float complex);
  82  long double complex csqrtl(long double complex);
  83  
  84  double carg(double complex);
  85  float cargf(float complex);
  86  long double cargl(long double complex);
  87  
  88  double cimag(double complex);
  89  float cimagf(float complex);
  90  long double cimagl(long double complex);
  91  
  92  double complex conj(double complex);
  93  float complex conjf(float complex);
  94  long double complex conjl(long double complex);
  95  
  96  double complex cproj(double complex);
  97  float complex cprojf(float complex);
  98  long double complex cprojl(long double complex);
  99  
 100  double creal(double complex);
 101  float crealf(float complex);
 102  long double creall(long double complex);
 103  
 104  #ifndef __cplusplus
 105  #define __CIMAG(x, t) \
 106  	(+(union { _Complex t __z; t __xy[2]; }){(_Complex t)(x)}.__xy[1])
 107  
 108  #define creal(x) ((double)(x))
 109  #define crealf(x) ((float)(x))
 110  #define creall(x) ((long double)(x))
 111  
 112  #define cimag(x) __CIMAG(x, double)
 113  #define cimagf(x) __CIMAG(x, float)
 114  #define cimagl(x) __CIMAG(x, long double)
 115  #endif
 116  
 117  #if __STDC_VERSION__ >= 201112L
 118  #if defined(_Imaginary_I)
 119  #define __CMPLX(x, y, t) ((t)(x) + _Imaginary_I*(t)(y))
 120  #elif defined(__clang__)
 121  #define __CMPLX(x, y, t) (+(_Complex t){ (t)(x), (t)(y) })
 122  #else
 123  #define __CMPLX(x, y, t) (__builtin_complex((t)(x), (t)(y)))
 124  #endif
 125  #define CMPLX(x, y) __CMPLX(x, y, double)
 126  #define CMPLXF(x, y) __CMPLX(x, y, float)
 127  #define CMPLXL(x, y) __CMPLX(x, y, long double)
 128  #endif
 129  
 130  #ifdef __cplusplus
 131  }
 132  #endif
 133  #endif
 134