blob: 11158622c790c67a20f6a4039433ee18f8fb380b [file] [log] [blame]
Elliott Hughesa0ee0782013-01-30 19:06:37 -08001/*-
2 * Copyright (c) 2001-2011 The FreeBSD Project.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD$
27 */
28
29#ifndef _COMPLEX_H
30#define _COMPLEX_H
31
32#include <sys/cdefs.h>
33
34#ifdef __GNUC__
Elliott Hughesa0ee0782013-01-30 19:06:37 -080035#define _Complex_I ((float _Complex)1.0i)
36#endif
37
38#ifdef __generic
39_Static_assert(__generic(_Complex_I, float _Complex, 1, 0),
40 "_Complex_I must be of type float _Complex");
41#endif
42
43#define complex _Complex
44#define I _Complex_I
45
Elliott Hughes3ba55f82016-06-08 18:11:23 -070046#if __STDC_VERSION__ >= 201112L
Elliott Hughesb8ee16f2014-11-06 11:16:55 -080047#define CMPLX(x, y) ((double complex){ x, y })
48#define CMPLXF(x, y) ((float complex){ x, y })
49#define CMPLXL(x, y) ((long double complex){ x, y })
Elliott Hughes3ba55f82016-06-08 18:11:23 -070050#endif
Elliott Hughesb8ee16f2014-11-06 11:16:55 -080051
Elliott Hughesa0ee0782013-01-30 19:06:37 -080052__BEGIN_DECLS
53
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080054/* 7.3.5 Trigonometric functions */
55/* 7.3.5.1 The cacos functions */
Dan Albert02ce4012024-10-25 19:13:49 +000056
57#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -070058double complex cacos(double complex __z) __INTRODUCED_IN(23);
59float complex cacosf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +000060#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
61
62
63#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +000064long double complex cacosl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +000065#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
66
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080067/* 7.3.5.2 The casin functions */
Dan Albert02ce4012024-10-25 19:13:49 +000068
69#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -070070double complex casin(double complex __z) __INTRODUCED_IN(23);
71float complex casinf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +000072#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
73
74
75#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +000076long double complex casinl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +000077#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
78
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080079/* 7.3.5.1 The catan functions */
Dan Albert02ce4012024-10-25 19:13:49 +000080
81#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -070082double complex catan(double complex __z) __INTRODUCED_IN(23);
83float complex catanf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +000084#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
85
86
87#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +000088long double complex catanl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +000089#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
90
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080091/* 7.3.5.1 The ccos functions */
Dan Albert02ce4012024-10-25 19:13:49 +000092
93#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -070094double complex ccos(double complex __z) __INTRODUCED_IN(23);
95float complex ccosf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +000096#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
97
98
99#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000100long double complex ccosl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000101#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
102
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800103/* 7.3.5.1 The csin functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000104
105#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700106double complex csin(double complex __z) __INTRODUCED_IN(23);
107float complex csinf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000108#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
109
110
111#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000112long double complex csinl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000113#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
114
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800115/* 7.3.5.1 The ctan functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000116
117#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700118double complex ctan(double complex __z) __INTRODUCED_IN(23);
119float complex ctanf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000120#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
121
122
123#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000124long double complex ctanl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000125#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
126
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800127
128/* 7.3.6 Hyperbolic functions */
129/* 7.3.6.1 The cacosh functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000130
131#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700132double complex cacosh(double complex __z) __INTRODUCED_IN(23);
133float complex cacoshf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000134#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
135
136
137#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000138long double complex cacoshl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000139#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
140
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800141/* 7.3.6.2 The casinh functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000142
143#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700144double complex casinh(double complex __z) __INTRODUCED_IN(23);
145float complex casinhf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000146#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
147
148
149#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000150long double complex casinhl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000151#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
152
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800153/* 7.3.6.3 The catanh functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000154
155#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700156double complex catanh(double complex __z) __INTRODUCED_IN(23);
157float complex catanhf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000158#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
159
160
161#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000162long double complex catanhl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000163#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
164
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800165/* 7.3.6.4 The ccosh functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000166
167#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700168double complex ccosh(double complex __z) __INTRODUCED_IN(23);
169float complex ccoshf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000170#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
171
172
173#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000174long double complex ccoshl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000175#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
176
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800177/* 7.3.6.5 The csinh functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000178
179#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700180double complex csinh(double complex __z) __INTRODUCED_IN(23);
181float complex csinhf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000182#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
183
184
185#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000186long double complex csinhl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000187#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
188
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800189/* 7.3.6.6 The ctanh functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000190
191#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700192double complex ctanh(double complex __z) __INTRODUCED_IN(23);
193float complex ctanhf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000194#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
195
196
197#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000198long double complex ctanhl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000199#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
200
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800201
202/* 7.3.7 Exponential and logarithmic functions */
203/* 7.3.7.1 The cexp functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000204
205#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700206double complex cexp(double complex __z) __INTRODUCED_IN(23);
207float complex cexpf(float complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000208#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
209
210
211#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000212long double complex cexpl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800213/* 7.3.7.2 The clog functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700214double complex clog(double complex __z) __INTRODUCED_IN(26);
215float complex clogf(float complex __z) __INTRODUCED_IN(26);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000216long double complex clogl(long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000217#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
218
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800219
220/* 7.3.8 Power and absolute-value functions */
221/* 7.3.8.1 The cabs functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000222
223#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700224double cabs(double complex __z) __INTRODUCED_IN(23);
225float cabsf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughes8fc6fcd2023-06-12 10:22:12 -0700226long double cabsl(long double complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000227#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
228
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800229/* 7.3.8.2 The cpow functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000230
231#if __BIONIC_AVAILABILITY_GUARD(26)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700232double complex cpow(double complex __x, double complex __z) __INTRODUCED_IN(26);
233float complex cpowf(float complex __x, float complex __z) __INTRODUCED_IN(26);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000234long double complex cpowl(long double complex __x, long double complex __z) __INTRODUCED_IN(26);
Dan Albert02ce4012024-10-25 19:13:49 +0000235#endif /* __BIONIC_AVAILABILITY_GUARD(26) */
236
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800237/* 7.3.8.3 The csqrt functions */
Dan Albert02ce4012024-10-25 19:13:49 +0000238
239#if __BIONIC_AVAILABILITY_GUARD(23)
Elliott Hughes684c31a2017-08-18 15:07:41 -0700240double complex csqrt(double complex __z) __INTRODUCED_IN(23);
241float complex csqrtf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughes8fc6fcd2023-06-12 10:22:12 -0700242long double complex csqrtl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800243
244/* 7.3.9 Manipulation functions */
245/* 7.3.9.1 The carg functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700246double carg(double complex __z) __INTRODUCED_IN(23);
247float cargf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000248long double cargl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800249/* 7.3.9.2 The cimag functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700250double cimag(double complex __z) __INTRODUCED_IN(23);
251float cimagf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000252long double cimagl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800253/* 7.3.9.3 The conj functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700254double complex conj(double complex __z) __INTRODUCED_IN(23);
255float complex conjf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000256long double complex conjl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800257/* 7.3.9.4 The cproj functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700258double complex cproj(double complex __z) __INTRODUCED_IN(23);
259float complex cprojf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughes8fc6fcd2023-06-12 10:22:12 -0700260long double complex cprojl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800261/* 7.3.9.5 The creal functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700262double creal(double complex __z) __INTRODUCED_IN(23);
263float crealf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000264long double creall(long double complex __z) __INTRODUCED_IN(23);
Dan Albert02ce4012024-10-25 19:13:49 +0000265#endif /* __BIONIC_AVAILABILITY_GUARD(23) */
266
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800267
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800268__END_DECLS
269
Elliott Hughes684c31a2017-08-18 15:07:41 -0700270#endif