blob: f205abdbafd5e467fbb92965a9968d4429a93de6 [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 */
Elliott Hughes684c31a2017-08-18 15:07:41 -070056double complex cacos(double complex __z) __INTRODUCED_IN(23);
57float complex cacosf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000058long double complex cacosl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080059/* 7.3.5.2 The casin functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070060double complex casin(double complex __z) __INTRODUCED_IN(23);
61float complex casinf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000062long double complex casinl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080063/* 7.3.5.1 The catan functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070064double complex catan(double complex __z) __INTRODUCED_IN(23);
65float complex catanf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000066long double complex catanl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080067/* 7.3.5.1 The ccos functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070068double complex ccos(double complex __z) __INTRODUCED_IN(23);
69float complex ccosf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000070long double complex ccosl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080071/* 7.3.5.1 The csin functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070072double complex csin(double complex __z) __INTRODUCED_IN(23);
73float complex csinf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000074long double complex csinl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080075/* 7.3.5.1 The ctan functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070076double complex ctan(double complex __z) __INTRODUCED_IN(23);
77float complex ctanf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000078long double complex ctanl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080079
80/* 7.3.6 Hyperbolic functions */
81/* 7.3.6.1 The cacosh functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070082double complex cacosh(double complex __z) __INTRODUCED_IN(23);
83float complex cacoshf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000084long double complex cacoshl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080085/* 7.3.6.2 The casinh functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070086double complex casinh(double complex __z) __INTRODUCED_IN(23);
87float complex casinhf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000088long double complex casinhl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080089/* 7.3.6.3 The catanh functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070090double complex catanh(double complex __z) __INTRODUCED_IN(23);
91float complex catanhf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000092long double complex catanhl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080093/* 7.3.6.4 The ccosh functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070094double complex ccosh(double complex __z) __INTRODUCED_IN(23);
95float complex ccoshf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +000096long double complex ccoshl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -080097/* 7.3.6.5 The csinh functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -070098double complex csinh(double complex __z) __INTRODUCED_IN(23);
99float complex csinhf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000100long double complex csinhl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800101/* 7.3.6.6 The ctanh functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700102double complex ctanh(double complex __z) __INTRODUCED_IN(23);
103float complex ctanhf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000104long double complex ctanhl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800105
106/* 7.3.7 Exponential and logarithmic functions */
107/* 7.3.7.1 The cexp functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700108double complex cexp(double complex __z) __INTRODUCED_IN(23);
109float complex cexpf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000110long double complex cexpl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800111/* 7.3.7.2 The clog functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700112double complex clog(double complex __z) __INTRODUCED_IN(26);
113float complex clogf(float complex __z) __INTRODUCED_IN(26);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000114long double complex clogl(long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800115
116/* 7.3.8 Power and absolute-value functions */
117/* 7.3.8.1 The cabs functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700118double cabs(double complex __z) __INTRODUCED_IN(23);
119float cabsf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughes8fc6fcd2023-06-12 10:22:12 -0700120long double cabsl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800121/* 7.3.8.2 The cpow functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700122double complex cpow(double complex __x, double complex __z) __INTRODUCED_IN(26);
123float complex cpowf(float complex __x, float complex __z) __INTRODUCED_IN(26);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000124long double complex cpowl(long double complex __x, long double complex __z) __INTRODUCED_IN(26);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800125/* 7.3.8.3 The csqrt functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700126double complex csqrt(double complex __z) __INTRODUCED_IN(23);
127float complex csqrtf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughes8fc6fcd2023-06-12 10:22:12 -0700128long double complex csqrtl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800129
130/* 7.3.9 Manipulation functions */
131/* 7.3.9.1 The carg functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700132double carg(double complex __z) __INTRODUCED_IN(23);
133float cargf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000134long double cargl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800135/* 7.3.9.2 The cimag functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700136double cimag(double complex __z) __INTRODUCED_IN(23);
137float cimagf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000138long double cimagl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800139/* 7.3.9.3 The conj functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700140double complex conj(double complex __z) __INTRODUCED_IN(23);
141float complex conjf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000142long double complex conjl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800143/* 7.3.9.4 The cproj functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700144double complex cproj(double complex __z) __INTRODUCED_IN(23);
145float complex cprojf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughes8fc6fcd2023-06-12 10:22:12 -0700146long double complex cprojl(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughes9ee6adb2016-03-11 14:49:13 -0800147/* 7.3.9.5 The creal functions */
Elliott Hughes684c31a2017-08-18 15:07:41 -0700148double creal(double complex __z) __INTRODUCED_IN(23);
149float crealf(float complex __z) __INTRODUCED_IN(23);
Elliott Hughesab2d3e12023-06-07 17:16:34 +0000150long double creall(long double complex __z) __INTRODUCED_IN(23);
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800151
Elliott Hughesa0ee0782013-01-30 19:06:37 -0800152__END_DECLS
153
Elliott Hughes684c31a2017-08-18 15:07:41 -0700154#endif