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