xref: /dflybsd-src/contrib/openbsd_libm/include/global/complex.h (revision 9a1d06887ef660a8ac70c238d06c4c5e4e7363ee)
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