105a0b428SJohn Marino /* $OpenBSD: complex.h,v 1.5 2014/03/16 18:38:30 guenther Exp $ */ 205a0b428SJohn Marino /* 305a0b428SJohn Marino * Copyright (c) 2008 Martynas Venckus <martynas@openbsd.org> 405a0b428SJohn Marino * 505a0b428SJohn Marino * Permission to use, copy, modify, and distribute this software for any 605a0b428SJohn Marino * purpose with or without fee is hereby granted, provided that the above 705a0b428SJohn Marino * copyright notice and this permission notice appear in all copies. 805a0b428SJohn Marino * 905a0b428SJohn Marino * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1005a0b428SJohn Marino * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1105a0b428SJohn Marino * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1205a0b428SJohn Marino * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1305a0b428SJohn Marino * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1405a0b428SJohn Marino * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1505a0b428SJohn Marino * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1605a0b428SJohn Marino */ 1705a0b428SJohn Marino 1805a0b428SJohn Marino #ifndef _COMPLEX_H_ 1905a0b428SJohn Marino #define _COMPLEX_H_ 2005a0b428SJohn Marino 2105a0b428SJohn Marino #include <sys/cdefs.h> 2205a0b428SJohn Marino 2305a0b428SJohn Marino /* 2405a0b428SJohn Marino * C99 2505a0b428SJohn Marino */ 2605a0b428SJohn Marino #ifdef __GNUC__ 2705a0b428SJohn Marino #if __STDC_VERSION__ < 199901 2805a0b428SJohn Marino #define _Complex __complex__ 2905a0b428SJohn Marino #endif 3005a0b428SJohn Marino #define _Complex_I 1.0fi 3105a0b428SJohn Marino #endif 3205a0b428SJohn Marino 3305a0b428SJohn Marino #define complex _Complex 3405a0b428SJohn Marino 3505a0b428SJohn Marino /* XXX switch to _Imaginary_I */ 3605a0b428SJohn Marino #undef I 3705a0b428SJohn Marino #define I _Complex_I 3805a0b428SJohn Marino 39*9a1d0688SJohn Marino #if __ISO_C_VISIBLE >= 2011 40*9a1d0688SJohn Marino #if __GNUC_PREREQ__(4, 7) 41*9a1d0688SJohn Marino #define CMPLX(x, y) __builtin_complex((double)(x), (double)(y)) 42*9a1d0688SJohn Marino #define CMPLXF(x, y) __builtin_complex((float)(x), (float)(y)) 43*9a1d0688SJohn Marino #define CMPLXL(x, y) __builtin_complex((long double)(x), (long double)(y)) 44*9a1d0688SJohn Marino #elif defined __clang__ 45*9a1d0688SJohn Marino #define CMPLX(x, y) ((double complex){ x, y }) 46*9a1d0688SJohn Marino #define CMPLXF(x, y) ((float complex){ x, y }) 47*9a1d0688SJohn Marino #define CMPLXL(x, y) ((long double complex){ x, y }) 48*9a1d0688SJohn Marino #endif 49*9a1d0688SJohn Marino #endif /* __ISO_C_VISIBLE >= 2011 */ 50*9a1d0688SJohn Marino 5105a0b428SJohn Marino __BEGIN_DECLS 5205a0b428SJohn Marino /* 5305a0b428SJohn Marino * Double versions of C99 functions 5405a0b428SJohn Marino */ 5505a0b428SJohn Marino double complex cacos(double complex); 5605a0b428SJohn Marino double complex casin(double complex); 5705a0b428SJohn Marino double complex catan(double complex); 5805a0b428SJohn Marino double complex ccos(double complex); 5905a0b428SJohn Marino double complex csin(double complex); 6005a0b428SJohn Marino double complex ctan(double complex); 6105a0b428SJohn Marino double complex cacosh(double complex); 6205a0b428SJohn Marino double complex casinh(double complex); 6305a0b428SJohn Marino double complex catanh(double complex); 6405a0b428SJohn Marino double complex ccosh(double complex); 6505a0b428SJohn Marino double complex csinh(double complex); 6605a0b428SJohn Marino double complex ctanh(double complex); 6705a0b428SJohn Marino double complex cexp(double complex); 6805a0b428SJohn Marino double complex clog(double complex); 6905a0b428SJohn Marino double cabs(double complex); 7005a0b428SJohn Marino double complex cpow(double complex, double complex); 7105a0b428SJohn Marino double complex csqrt(double complex); 7205a0b428SJohn Marino double carg(double complex); 7305a0b428SJohn Marino double cimag(double complex); 7405a0b428SJohn Marino double complex conj(double complex); 7505a0b428SJohn Marino double complex cproj(double complex); 7605a0b428SJohn Marino double creal(double complex); 7705a0b428SJohn Marino 7805a0b428SJohn Marino /* 7905a0b428SJohn Marino * Float versions of C99 functions 8005a0b428SJohn Marino */ 8105a0b428SJohn Marino float complex cacosf(float complex); 8205a0b428SJohn Marino float complex casinf(float complex); 8305a0b428SJohn Marino float complex catanf(float complex); 8405a0b428SJohn Marino float complex ccosf(float complex); 8505a0b428SJohn Marino float complex csinf(float complex); 8605a0b428SJohn Marino float complex ctanf(float complex); 8705a0b428SJohn Marino float complex cacoshf(float complex); 8805a0b428SJohn Marino float complex casinhf(float complex); 8905a0b428SJohn Marino float complex catanhf(float complex); 9005a0b428SJohn Marino float complex ccoshf(float complex); 9105a0b428SJohn Marino float complex csinhf(float complex); 9205a0b428SJohn Marino float complex ctanhf(float complex); 9305a0b428SJohn Marino float complex cexpf(float complex); 9405a0b428SJohn Marino float complex clogf(float complex); 9505a0b428SJohn Marino float cabsf(float complex); 9605a0b428SJohn Marino float complex cpowf(float complex, float complex); 9705a0b428SJohn Marino float complex csqrtf(float complex); 9805a0b428SJohn Marino float cargf(float complex); 9905a0b428SJohn Marino float cimagf(float complex); 10005a0b428SJohn Marino float complex conjf(float complex); 10105a0b428SJohn Marino float complex cprojf(float complex); 10205a0b428SJohn Marino float crealf(float complex); 10305a0b428SJohn Marino 10405a0b428SJohn Marino /* 10505a0b428SJohn Marino * Long double versions of C99 functions 10605a0b428SJohn Marino */ 10705a0b428SJohn Marino long double complex cacosl(long double complex); 10805a0b428SJohn Marino long double complex casinl(long double complex); 10905a0b428SJohn Marino long double complex catanl(long double complex); 11005a0b428SJohn Marino long double complex ccosl(long double complex); 11105a0b428SJohn Marino long double complex csinl(long double complex); 11205a0b428SJohn Marino long double complex ctanl(long double complex); 11305a0b428SJohn Marino long double complex cacoshl(long double complex); 11405a0b428SJohn Marino long double complex casinhl(long double complex); 11505a0b428SJohn Marino long double complex catanhl(long double complex); 11605a0b428SJohn Marino long double complex ccoshl(long double complex); 11705a0b428SJohn Marino long double complex csinhl(long double complex); 11805a0b428SJohn Marino long double complex ctanhl(long double complex); 11905a0b428SJohn Marino long double complex cexpl(long double complex); 12005a0b428SJohn Marino long double complex clogl(long double complex); 12105a0b428SJohn Marino long double cabsl(long double complex); 12205a0b428SJohn Marino long double complex cpowl(long double complex, 12305a0b428SJohn Marino long double complex); 12405a0b428SJohn Marino long double complex csqrtl(long double complex); 12505a0b428SJohn Marino long double cargl(long double complex); 12605a0b428SJohn Marino long double cimagl(long double complex); 12705a0b428SJohn Marino long double complex conjl(long double complex); 12805a0b428SJohn Marino long double complex cprojl(long double complex); 12905a0b428SJohn Marino long double creall(long double complex); 13005a0b428SJohn Marino __END_DECLS 13105a0b428SJohn Marino 13205a0b428SJohn Marino #endif /* !_COMPLEX_H_ */ 133