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