1a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes/*-
2a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * Copyright (c) 2001-2011 The FreeBSD Project.
3a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * All rights reserved.
4a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes *
5a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * Redistribution and use in source and binary forms, with or without
6a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * modification, are permitted provided that the following conditions
7a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * are met:
8a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * 1. Redistributions of source code must retain the above copyright
9a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes *    notice, this list of conditions and the following disclaimer.
10a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * 2. Redistributions in binary form must reproduce the above copyright
11a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes *    notice, this list of conditions and the following disclaimer in the
12a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes *    documentation and/or other materials provided with the distribution.
13a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes *
14a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * SUCH DAMAGE.
25a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes *
26a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes * $FreeBSD$
27a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes */
28a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
29a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#ifndef _COMPLEX_H
30a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define	_COMPLEX_H
31a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
32a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#include <sys/cdefs.h>
33a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
34a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#ifdef __GNUC__
35a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define	_Complex_I	((float _Complex)1.0i)
36a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#endif
37a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
38a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#ifdef __generic
39a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes_Static_assert(__generic(_Complex_I, float _Complex, 1, 0),
40a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes    "_Complex_I must be of type float _Complex");
41a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#endif
42a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
43a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define	complex		_Complex
44a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#define	I		_Complex_I
45a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
463ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#if __STDC_VERSION__ >= 201112L
47b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#ifdef __clang__
48b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#define	CMPLX(x, y)	((double complex){ x, y })
49b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#define	CMPLXF(x, y)	((float complex){ x, y })
50b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#define	CMPLXL(x, y)	((long double complex){ x, y })
519ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes#else
52b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#define	CMPLX(x, y)	__builtin_complex((double)(x), (double)(y))
53b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#define	CMPLXF(x, y)	__builtin_complex((float)(x), (float)(y))
54b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#define	CMPLXL(x, y)	__builtin_complex((long double)(x), (long double)(y))
55b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes#endif
563ba55f8022f3d5c5ca94a3df46fa658eda791987Elliott Hughes#endif
57b8ee16f1dc1253e3f1c99b4a6b9df249515cd919Elliott Hughes
58a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes__BEGIN_DECLS
59a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
609ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5 Trigonometric functions */
619ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5.1 The cacos functions */
6214adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex cacos(double complex) __INTRODUCED_IN(23);
6314adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex cacosf(float complex) __INTRODUCED_IN(23);
64cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex cacosl(long double complex) __INTRODUCED_IN(26);
659ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5.2 The casin functions */
6614adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex casin(double complex) __INTRODUCED_IN(23);
6714adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex casinf(float complex) __INTRODUCED_IN(23);
68cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex casinl(long double complex) __INTRODUCED_IN(26);
699ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5.1 The catan functions */
7014adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex catan(double complex) __INTRODUCED_IN(23);
7114adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex catanf(float complex) __INTRODUCED_IN(23);
72cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex catanl(long double complex) __INTRODUCED_IN(26);
739ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5.1 The ccos functions */
7414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex ccos(double complex) __INTRODUCED_IN(23);
7514adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex ccosf(float complex) __INTRODUCED_IN(23);
76cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex ccosl(long double complex) __INTRODUCED_IN(26);
779ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5.1 The csin functions */
7814adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex csin(double complex) __INTRODUCED_IN(23);
7914adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex csinf(float complex) __INTRODUCED_IN(23);
80cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex csinl(long double complex) __INTRODUCED_IN(26);
819ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.5.1 The ctan functions */
8214adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex ctan(double complex) __INTRODUCED_IN(23);
8314adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex ctanf(float complex) __INTRODUCED_IN(23);
84cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex ctanl(long double complex) __INTRODUCED_IN(26);
859ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes
869ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6 Hyperbolic functions */
879ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6.1 The cacosh functions */
8814adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex cacosh(double complex) __INTRODUCED_IN(23);
8914adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex cacoshf(float complex) __INTRODUCED_IN(23);
90cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex cacoshl(long double complex) __INTRODUCED_IN(26);
919ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6.2 The casinh functions */
9214adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex casinh(double complex) __INTRODUCED_IN(23);
9314adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex casinhf(float complex) __INTRODUCED_IN(23);
94cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex casinhl(long double complex) __INTRODUCED_IN(26);
959ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6.3 The catanh functions */
9614adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex catanh(double complex) __INTRODUCED_IN(23);
9714adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex catanhf(float complex) __INTRODUCED_IN(23);
98cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex catanhl(long double complex) __INTRODUCED_IN(26);
999ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6.4 The ccosh functions */
10014adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex ccosh(double complex) __INTRODUCED_IN(23);
10114adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex ccoshf(float complex) __INTRODUCED_IN(23);
102cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex ccoshl(long double complex) __INTRODUCED_IN(26);
1039ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6.5 The csinh functions */
10414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex csinh(double complex) __INTRODUCED_IN(23);
10514adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex csinhf(float complex) __INTRODUCED_IN(23);
106cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex csinhl(long double complex) __INTRODUCED_IN(26);
1079ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.6.6 The ctanh functions */
10814adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex ctanh(double complex) __INTRODUCED_IN(23);
10914adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex ctanhf(float complex) __INTRODUCED_IN(23);
110cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex ctanhl(long double complex) __INTRODUCED_IN(26);
1119ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes
1129ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.7 Exponential and logarithmic functions */
1139ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.7.1 The cexp functions */
11414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex cexp(double complex) __INTRODUCED_IN(23);
11514adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex cexpf(float complex) __INTRODUCED_IN(23);
116cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex cexpl(long double complex) __INTRODUCED_IN(26);
1179ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.7.2 The clog functions */
118cb302f932a3532f1484e1e70894e9b1199384283Josh Gaodouble complex clog(double complex) __INTRODUCED_IN(26);
119cb302f932a3532f1484e1e70894e9b1199384283Josh Gaofloat complex clogf(float complex) __INTRODUCED_IN(26);
120cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex clogl(long double complex) __INTRODUCED_IN(26);
1219ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes
1229ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.8 Power and absolute-value functions */
1239ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.8.1 The cabs functions */
12414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble cabs(double complex) __INTRODUCED_IN(23);
12514adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat cabsf(float complex) __INTRODUCED_IN(23);
12614adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double cabsl(long double complex) __INTRODUCED_IN_32(21) __INTRODUCED_IN_64(23);
1279ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.8.2 The cpow functions */
128cb302f932a3532f1484e1e70894e9b1199384283Josh Gaodouble complex cpow(double complex, double complex) __INTRODUCED_IN(26);
129cb302f932a3532f1484e1e70894e9b1199384283Josh Gaofloat complex cpowf(float complex, float complex) __INTRODUCED_IN(26);
130cb302f932a3532f1484e1e70894e9b1199384283Josh Gaolong double complex cpowl(long double complex, long double complex) __INTRODUCED_IN(26);
1319ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.8.3 The csqrt functions */
13214adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex csqrt(double complex) __INTRODUCED_IN(23);
13314adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex csqrtf(float complex) __INTRODUCED_IN(23);
13414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double complex csqrtl(long double complex) __INTRODUCED_IN_32(21) __INTRODUCED_IN_64(23);
1359ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes
1369ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.9 Manipulation functions */
1379ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.9.1 The carg functions */
13814adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble carg(double complex) __INTRODUCED_IN(23);
13914adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat cargf(float complex) __INTRODUCED_IN(23);
14014adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double cargl(long double complex) __INTRODUCED_IN(23);
1419ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.9.2 The cimag functions */
14214adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble cimag(double complex) __INTRODUCED_IN(23);
14314adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat cimagf(float complex) __INTRODUCED_IN(23);
14414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double cimagl(long double complex) __INTRODUCED_IN(23);
1459ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.9.3 The conj functions */
14614adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex conj(double complex) __INTRODUCED_IN(23);
14714adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex conjf(float complex) __INTRODUCED_IN(23);
14814adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double complex conjl(long double complex) __INTRODUCED_IN(23);
1499ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.9.4 The cproj functions */
15014adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble complex cproj(double complex) __INTRODUCED_IN(23);
15114adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat complex cprojf(float complex) __INTRODUCED_IN(23);
15214adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double complex cprojl(long double complex) __INTRODUCED_IN_32(21) __INTRODUCED_IN_64(23);
1539ee6adb003eb5a9855ff6c47f9c150b415a11299Elliott Hughes/* 7.3.9.5 The creal functions */
15414adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaodouble creal(double complex) __INTRODUCED_IN(23);
15514adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaofloat crealf(float complex) __INTRODUCED_IN(23);
15614adff1cfa06a3d4d3281a9bf7848b556d84c20dJosh Gaolong double creall(long double complex) __INTRODUCED_IN(23);
157a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
158a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes__END_DECLS
159a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes
160a0ee07829a9ba7e99ef68e8c12551301cc797f0fElliott Hughes#endif /* _COMPLEX_H */
161