xref: /freebsd-src/include/complex.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
1d28011e5SRuslan Ermilov /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
3e58eb3c4SPedro F. Giffuni  *
43daee1d6SDavid Schultz  * Copyright (c) 2001-2011 The FreeBSD Project.
5d28011e5SRuslan Ermilov  * All rights reserved.
6d28011e5SRuslan Ermilov  *
7d28011e5SRuslan Ermilov  * Redistribution and use in source and binary forms, with or without
8d28011e5SRuslan Ermilov  * modification, are permitted provided that the following conditions
9d28011e5SRuslan Ermilov  * are met:
10d28011e5SRuslan Ermilov  * 1. Redistributions of source code must retain the above copyright
11d28011e5SRuslan Ermilov  *    notice, this list of conditions and the following disclaimer.
12d28011e5SRuslan Ermilov  * 2. Redistributions in binary form must reproduce the above copyright
13d28011e5SRuslan Ermilov  *    notice, this list of conditions and the following disclaimer in the
14d28011e5SRuslan Ermilov  *    documentation and/or other materials provided with the distribution.
15d28011e5SRuslan Ermilov  *
16d28011e5SRuslan Ermilov  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17d28011e5SRuslan Ermilov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18d28011e5SRuslan Ermilov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19d28011e5SRuslan Ermilov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20d28011e5SRuslan Ermilov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21d28011e5SRuslan Ermilov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22d28011e5SRuslan Ermilov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23d28011e5SRuslan Ermilov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24d28011e5SRuslan Ermilov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25d28011e5SRuslan Ermilov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26d28011e5SRuslan Ermilov  * SUCH DAMAGE.
27d28011e5SRuslan Ermilov  */
28d28011e5SRuslan Ermilov 
29d28011e5SRuslan Ermilov #ifndef _COMPLEX_H
30d28011e5SRuslan Ermilov #define	_COMPLEX_H
31d28011e5SRuslan Ermilov 
32f92d9d7dSEd Schouten #include <sys/cdefs.h>
33f92d9d7dSEd Schouten 
34d28011e5SRuslan Ermilov #ifdef __GNUC__
354dfac645SStefan Farfeleder #if __STDC_VERSION__ < 199901
36d28011e5SRuslan Ermilov #define	_Complex	__complex__
374dfac645SStefan Farfeleder #endif
38f92d9d7dSEd Schouten #define	_Complex_I	((float _Complex)1.0i)
3976f11d88SEd Schouten #endif
4076f11d88SEd Schouten 
4176f11d88SEd Schouten #ifdef __generic
42f92d9d7dSEd Schouten _Static_assert(__generic(_Complex_I, float _Complex, 1, 0),
43f92d9d7dSEd Schouten     "_Complex_I must be of type float _Complex");
44d28011e5SRuslan Ermilov #endif
45d28011e5SRuslan Ermilov 
46d28011e5SRuslan Ermilov #define	complex		_Complex
47d28011e5SRuslan Ermilov #define	I		_Complex_I
48d28011e5SRuslan Ermilov 
49e814330dSEd Schouten #if __ISO_C_VISIBLE >= 2011
50e814330dSEd Schouten #ifdef __clang__
51e814330dSEd Schouten #define	CMPLX(x, y)	((double complex){ x, y })
52e814330dSEd Schouten #define	CMPLXF(x, y)	((float complex){ x, y })
53e814330dSEd Schouten #define	CMPLXL(x, y)	((long double complex){ x, y })
54e814330dSEd Schouten #elif __GNUC_PREREQ__(4, 7)
55e814330dSEd Schouten #define	CMPLX(x, y)	__builtin_complex((double)(x), (double)(y))
56e814330dSEd Schouten #define	CMPLXF(x, y)	__builtin_complex((float)(x), (float)(y))
57e814330dSEd Schouten #define	CMPLXL(x, y)	__builtin_complex((long double)(x), (long double)(y))
58e814330dSEd Schouten #endif
59e814330dSEd Schouten #endif /* __ISO_C_VISIBLE >= 2011 */
60e814330dSEd Schouten 
61d28011e5SRuslan Ermilov __BEGIN_DECLS
62d28011e5SRuslan Ermilov 
63bb28f3c2SWarner Losh double		cabs(double complex);
64bb28f3c2SWarner Losh float		cabsf(float complex);
6584c1c0a1SDavid Schultz long double	cabsl(long double complex);
66e4afa19cSDavid Schultz double complex	cacos(double complex);
67e4afa19cSDavid Schultz float complex	cacosf(float complex);
68e4afa19cSDavid Schultz double complex	cacosh(double complex);
69e4afa19cSDavid Schultz float complex	cacoshf(float complex);
70507c3d47SMahdi Mokhtari long double complex
71507c3d47SMahdi Mokhtari 		cacoshl(long double complex);
72507c3d47SMahdi Mokhtari long double complex
73507c3d47SMahdi Mokhtari 		cacosl(long double complex);
74205bd648SDavid Schultz double		carg(double complex);
75205bd648SDavid Schultz float		cargf(float complex);
76bda750b4SDavid Schultz long double	cargl(long double complex);
77e4afa19cSDavid Schultz double complex	casin(double complex);
78e4afa19cSDavid Schultz float complex	casinf(float complex);
79e4afa19cSDavid Schultz double complex	casinh(double complex);
80e4afa19cSDavid Schultz float complex	casinhf(float complex);
81507c3d47SMahdi Mokhtari long double complex
82507c3d47SMahdi Mokhtari 		casinhl(long double complex);
83507c3d47SMahdi Mokhtari long double complex
84507c3d47SMahdi Mokhtari 		casinl(long double complex);
85e4afa19cSDavid Schultz double complex	catan(double complex);
86e4afa19cSDavid Schultz float complex	catanf(float complex);
87e4afa19cSDavid Schultz double complex	catanh(double complex);
88e4afa19cSDavid Schultz float complex	catanhf(float complex);
89507c3d47SMahdi Mokhtari long double complex
90507c3d47SMahdi Mokhtari 		catanhl(long double complex);
91507c3d47SMahdi Mokhtari long double complex
92507c3d47SMahdi Mokhtari 		catanl(long double complex);
933daee1d6SDavid Schultz double complex	ccos(double complex);
943daee1d6SDavid Schultz float complex	ccosf(float complex);
953daee1d6SDavid Schultz double complex	ccosh(double complex);
963daee1d6SDavid Schultz float complex	ccoshf(float complex);
97cf3943e4SDavid Schultz double complex	cexp(double complex);
98cf3943e4SDavid Schultz float complex	cexpf(float complex);
99046e2d5dSSteve Kargl long double complex
100046e2d5dSSteve Kargl 		cexpl(long double complex);
101bda750b4SDavid Schultz double		cimag(double complex) __pure2;
102bda750b4SDavid Schultz float		cimagf(float complex) __pure2;
103bda750b4SDavid Schultz long double	cimagl(long double complex) __pure2;
1040c0288a2SKonstantin Belousov double complex	clog(double complex);
1050c0288a2SKonstantin Belousov float complex	clogf(float complex);
1060c0288a2SKonstantin Belousov long double complex
1070c0288a2SKonstantin Belousov 		clogl(long double complex);
108bda750b4SDavid Schultz double complex	conj(double complex) __pure2;
109bda750b4SDavid Schultz float complex	conjf(float complex) __pure2;
1108b5cd5a6SStefan Farfeleder long double complex
111bda750b4SDavid Schultz 		conjl(long double complex) __pure2;
1126813d08fSMatt Macy float complex	cpowf(float complex, float complex);
1136813d08fSMatt Macy double complex	cpow(double complex, double complex);
1146813d08fSMatt Macy long double complex
1156813d08fSMatt Macy 		cpowl(long double complex, long double complex);
1165e9470f1SDavid Schultz float complex	cprojf(float complex) __pure2;
1175e9470f1SDavid Schultz double complex	cproj(double complex) __pure2;
1185e9470f1SDavid Schultz long double complex
1195e9470f1SDavid Schultz 		cprojl(long double complex) __pure2;
120bda750b4SDavid Schultz double		creal(double complex) __pure2;
121bda750b4SDavid Schultz float		crealf(float complex) __pure2;
122bda750b4SDavid Schultz long double	creall(long double complex) __pure2;
1233daee1d6SDavid Schultz double complex	csin(double complex);
1243daee1d6SDavid Schultz float complex	csinf(float complex);
1253daee1d6SDavid Schultz double complex	csinh(double complex);
1263daee1d6SDavid Schultz float complex	csinhf(float complex);
127aaf70b23SDavid Schultz double complex	csqrt(double complex);
128aaf70b23SDavid Schultz float complex	csqrtf(float complex);
129511dd36bSDavid Schultz long double complex
130511dd36bSDavid Schultz 		csqrtl(long double complex);
1313daee1d6SDavid Schultz double complex	ctan(double complex);
1323daee1d6SDavid Schultz float complex	ctanf(float complex);
1333daee1d6SDavid Schultz double complex	ctanh(double complex);
1343daee1d6SDavid Schultz float complex	ctanhf(float complex);
135d28011e5SRuslan Ermilov 
136d28011e5SRuslan Ermilov __END_DECLS
137d28011e5SRuslan Ermilov 
138d28011e5SRuslan Ermilov #endif /* _COMPLEX_H */
139