17777dab0Sopenharmony_ci#ifndef _COMPLEX_H
27777dab0Sopenharmony_ci#define _COMPLEX_H
37777dab0Sopenharmony_ci
47777dab0Sopenharmony_ci#ifdef __cplusplus
57777dab0Sopenharmony_ciextern "C" {
67777dab0Sopenharmony_ci#endif
77777dab0Sopenharmony_ci
87777dab0Sopenharmony_ci#define complex _Complex
97777dab0Sopenharmony_ci#ifdef __GNUC__
107777dab0Sopenharmony_ci#define _Complex_I (__extension__ (0.0f+1.0fi))
117777dab0Sopenharmony_ci#else
127777dab0Sopenharmony_ci#define _Complex_I (0.0f+1.0fi)
137777dab0Sopenharmony_ci#endif
147777dab0Sopenharmony_ci#define I _Complex_I
157777dab0Sopenharmony_ci
167777dab0Sopenharmony_cidouble complex cacos(double complex);
177777dab0Sopenharmony_cifloat complex cacosf(float complex);
187777dab0Sopenharmony_cilong double complex cacosl(long double complex);
197777dab0Sopenharmony_ci
207777dab0Sopenharmony_cidouble complex casin(double complex);
217777dab0Sopenharmony_cifloat complex casinf(float complex);
227777dab0Sopenharmony_cilong double complex casinl(long double complex);
237777dab0Sopenharmony_ci
247777dab0Sopenharmony_cidouble complex catan(double complex);
257777dab0Sopenharmony_cifloat complex catanf(float complex);
267777dab0Sopenharmony_cilong double complex catanl(long double complex);
277777dab0Sopenharmony_ci
287777dab0Sopenharmony_cidouble complex ccos(double complex);
297777dab0Sopenharmony_cifloat complex ccosf(float complex);
307777dab0Sopenharmony_cilong double complex ccosl(long double complex);
317777dab0Sopenharmony_ci
327777dab0Sopenharmony_cidouble complex csin(double complex);
337777dab0Sopenharmony_cifloat complex csinf(float complex);
347777dab0Sopenharmony_cilong double complex csinl(long double complex);
357777dab0Sopenharmony_ci
367777dab0Sopenharmony_cidouble complex ctan(double complex);
377777dab0Sopenharmony_cifloat complex ctanf(float complex);
387777dab0Sopenharmony_cilong double complex ctanl(long double complex);
397777dab0Sopenharmony_ci
407777dab0Sopenharmony_cidouble complex cacosh(double complex);
417777dab0Sopenharmony_cifloat complex cacoshf(float complex);
427777dab0Sopenharmony_cilong double complex cacoshl(long double complex);
437777dab0Sopenharmony_ci
447777dab0Sopenharmony_cidouble complex casinh(double complex);
457777dab0Sopenharmony_cifloat complex casinhf(float complex);
467777dab0Sopenharmony_cilong double complex casinhl(long double complex);
477777dab0Sopenharmony_ci
487777dab0Sopenharmony_cidouble complex catanh(double complex);
497777dab0Sopenharmony_cifloat complex catanhf(float complex);
507777dab0Sopenharmony_cilong double complex catanhl(long double complex);
517777dab0Sopenharmony_ci
527777dab0Sopenharmony_cidouble complex ccosh(double complex);
537777dab0Sopenharmony_cifloat complex ccoshf(float complex);
547777dab0Sopenharmony_cilong double complex ccoshl(long double complex);
557777dab0Sopenharmony_ci
567777dab0Sopenharmony_cidouble complex csinh(double complex);
577777dab0Sopenharmony_cifloat complex csinhf(float complex);
587777dab0Sopenharmony_cilong double complex csinhl(long double complex);
597777dab0Sopenharmony_ci
607777dab0Sopenharmony_cidouble complex ctanh(double complex);
617777dab0Sopenharmony_cifloat complex ctanhf(float complex);
627777dab0Sopenharmony_cilong double complex ctanhl(long double complex);
637777dab0Sopenharmony_ci
647777dab0Sopenharmony_cidouble complex cexp(double complex);
657777dab0Sopenharmony_cifloat complex cexpf(float complex);
667777dab0Sopenharmony_cilong double complex cexpl(long double complex);
677777dab0Sopenharmony_ci
687777dab0Sopenharmony_cidouble complex clog(double complex);
697777dab0Sopenharmony_cifloat complex clogf(float complex);
707777dab0Sopenharmony_cilong double complex clogl(long double complex);
717777dab0Sopenharmony_ci
727777dab0Sopenharmony_cidouble cabs(double complex);
737777dab0Sopenharmony_cifloat cabsf(float complex);
747777dab0Sopenharmony_cilong double cabsl(long double complex);
757777dab0Sopenharmony_ci
767777dab0Sopenharmony_cidouble complex cpow(double complex, double complex);
777777dab0Sopenharmony_cifloat complex cpowf(float complex, float complex);
787777dab0Sopenharmony_cilong double complex cpowl(long double complex, long double complex);
797777dab0Sopenharmony_ci
807777dab0Sopenharmony_cidouble complex csqrt(double complex);
817777dab0Sopenharmony_cifloat complex csqrtf(float complex);
827777dab0Sopenharmony_cilong double complex csqrtl(long double complex);
837777dab0Sopenharmony_ci
847777dab0Sopenharmony_cidouble carg(double complex);
857777dab0Sopenharmony_cifloat cargf(float complex);
867777dab0Sopenharmony_cilong double cargl(long double complex);
877777dab0Sopenharmony_ci
887777dab0Sopenharmony_cidouble cimag(double complex);
897777dab0Sopenharmony_cifloat cimagf(float complex);
907777dab0Sopenharmony_cilong double cimagl(long double complex);
917777dab0Sopenharmony_ci
927777dab0Sopenharmony_cidouble complex conj(double complex);
937777dab0Sopenharmony_cifloat complex conjf(float complex);
947777dab0Sopenharmony_cilong double complex conjl(long double complex);
957777dab0Sopenharmony_ci
967777dab0Sopenharmony_cidouble complex cproj(double complex);
977777dab0Sopenharmony_cifloat complex cprojf(float complex);
987777dab0Sopenharmony_cilong double complex cprojl(long double complex);
997777dab0Sopenharmony_ci
1007777dab0Sopenharmony_cidouble creal(double complex);
1017777dab0Sopenharmony_cifloat crealf(float complex);
1027777dab0Sopenharmony_cilong double creall(long double complex);
1037777dab0Sopenharmony_ci
1047777dab0Sopenharmony_ci#ifndef __cplusplus
1057777dab0Sopenharmony_ci#define __CIMAG(x, t) \
1067777dab0Sopenharmony_ci	(+(union { _Complex t __z; t __xy[2]; }){(_Complex t)(x)}.__xy[1])
1077777dab0Sopenharmony_ci
1087777dab0Sopenharmony_ci#define creal(x) ((double)(x))
1097777dab0Sopenharmony_ci#define crealf(x) ((float)(x))
1107777dab0Sopenharmony_ci#define creall(x) ((long double)(x))
1117777dab0Sopenharmony_ci
1127777dab0Sopenharmony_ci#define cimag(x) __CIMAG(x, double)
1137777dab0Sopenharmony_ci#define cimagf(x) __CIMAG(x, float)
1147777dab0Sopenharmony_ci#define cimagl(x) __CIMAG(x, long double)
1157777dab0Sopenharmony_ci#endif
1167777dab0Sopenharmony_ci
1177777dab0Sopenharmony_ci#if __STDC_VERSION__ >= 201112L
1187777dab0Sopenharmony_ci#if defined(_Imaginary_I)
1197777dab0Sopenharmony_ci#define __CMPLX(x, y, t) ((t)(x) + _Imaginary_I*(t)(y))
1207777dab0Sopenharmony_ci#elif defined(__clang__)
1217777dab0Sopenharmony_ci#define __CMPLX(x, y, t) (+(_Complex t){ (t)(x), (t)(y) })
1227777dab0Sopenharmony_ci#else
1237777dab0Sopenharmony_ci#define __CMPLX(x, y, t) (__builtin_complex((t)(x), (t)(y)))
1247777dab0Sopenharmony_ci#endif
1257777dab0Sopenharmony_ci#define CMPLX(x, y) __CMPLX(x, y, double)
1267777dab0Sopenharmony_ci#define CMPLXF(x, y) __CMPLX(x, y, float)
1277777dab0Sopenharmony_ci#define CMPLXL(x, y) __CMPLX(x, y, long double)
1287777dab0Sopenharmony_ci#endif
1297777dab0Sopenharmony_ci
1307777dab0Sopenharmony_ci#ifdef __cplusplus
1317777dab0Sopenharmony_ci}
1327777dab0Sopenharmony_ci#endif
1337777dab0Sopenharmony_ci#endif
134