178172Sru/*- 2226458Sdas * Copyright (c) 2001-2011 The FreeBSD Project. 378172Sru * All rights reserved. 478172Sru * 578172Sru * Redistribution and use in source and binary forms, with or without 678172Sru * modification, are permitted provided that the following conditions 778172Sru * are met: 878172Sru * 1. Redistributions of source code must retain the above copyright 978172Sru * notice, this list of conditions and the following disclaimer. 1078172Sru * 2. Redistributions in binary form must reproduce the above copyright 1178172Sru * notice, this list of conditions and the following disclaimer in the 1278172Sru * documentation and/or other materials provided with the distribution. 1378172Sru * 1478172Sru * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1578172Sru * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1678172Sru * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1778172Sru * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1878172Sru * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1978172Sru * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2078172Sru * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2178172Sru * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2278172Sru * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2378172Sru * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2478172Sru * SUCH DAMAGE. 2578172Sru * 2678172Sru * $FreeBSD$ 2778172Sru */ 2878172Sru 2978172Sru#ifndef _COMPLEX_H 30133724Sstefanf#define _COMPLEX_H 3178172Sru 32229590Sed#include <sys/cdefs.h> 33229590Sed 3478172Sru#ifdef __GNUC__ 35133725Sstefanf#if __STDC_VERSION__ < 199901 36133724Sstefanf#define _Complex __complex__ 37133725Sstefanf#endif 38229590Sed#define _Complex_I ((float _Complex)1.0i) 39230278Sed#endif 40230278Sed 41230278Sed#ifdef __generic 42229590Sed_Static_assert(__generic(_Complex_I, float _Complex, 1, 0), 43229590Sed "_Complex_I must be of type float _Complex"); 4478172Sru#endif 4578172Sru 46133724Sstefanf#define complex _Complex 47133724Sstefanf#define I _Complex_I 4878172Sru 49250990Sed#if __ISO_C_VISIBLE >= 2011 50250990Sed#ifdef __clang__ 51250990Sed#define CMPLX(x, y) ((double complex){ x, y }) 52250990Sed#define CMPLXF(x, y) ((float complex){ x, y }) 53250990Sed#define CMPLXL(x, y) ((long double complex){ x, y }) 54250990Sed#elif __GNUC_PREREQ__(4, 7) 55250990Sed#define CMPLX(x, y) __builtin_complex((double)(x), (double)(y)) 56250990Sed#define CMPLXF(x, y) __builtin_complex((float)(x), (float)(y)) 57250990Sed#define CMPLXL(x, y) __builtin_complex((long double)(x), (long double)(y)) 58250990Sed#endif 59250990Sed#endif /* __ISO_C_VISIBLE >= 2011 */ 60250990Sed 6178172Sru__BEGIN_DECLS 6278172Sru 63129864Sstefanfdouble cabs(double complex); 64129864Sstefanffloat cabsf(float complex); 65177760Sdaslong double cabsl(long double complex); 66251121Sdasdouble complex cacos(double complex); 67251121Sdasfloat complex cacosf(float complex); 68251121Sdasdouble complex cacosh(double complex); 69251121Sdasfloat complex cacoshf(float complex); 70174561Sdasdouble carg(double complex); 71174561Sdasfloat cargf(float complex); 72181375Sdaslong double cargl(long double complex); 73251121Sdasdouble complex casin(double complex); 74251121Sdasfloat complex casinf(float complex); 75251121Sdasdouble complex casinh(double complex); 76251121Sdasfloat complex casinhf(float complex); 77251121Sdasdouble complex catan(double complex); 78251121Sdasfloat complex catanf(float complex); 79251121Sdasdouble complex catanh(double complex); 80251121Sdasfloat complex catanhf(float complex); 81226458Sdasdouble complex ccos(double complex); 82226458Sdasfloat complex ccosf(float complex); 83226458Sdasdouble complex ccosh(double complex); 84226458Sdasfloat complex ccoshf(float complex); 85219379Sdasdouble complex cexp(double complex); 86219379Sdasfloat complex cexpf(float complex); 87181375Sdasdouble cimag(double complex) __pure2; 88181375Sdasfloat cimagf(float complex) __pure2; 89181375Sdaslong double cimagl(long double complex) __pure2; 90181375Sdasdouble complex conj(double complex) __pure2; 91181375Sdasfloat complex conjf(float complex) __pure2; 92129864Sstefanflong double complex 93181375Sdas conjl(long double complex) __pure2; 94181377Sdasfloat complex cprojf(float complex) __pure2; 95181377Sdasdouble complex cproj(double complex) __pure2; 96181377Sdaslong double complex 97181377Sdas cprojl(long double complex) __pure2; 98181375Sdasdouble creal(double complex) __pure2; 99181375Sdasfloat crealf(float complex) __pure2; 100181375Sdaslong double creall(long double complex) __pure2; 101226458Sdasdouble complex csin(double complex); 102226458Sdasfloat complex csinf(float complex); 103226458Sdasdouble complex csinh(double complex); 104226458Sdasfloat complex csinhf(float complex); 105174617Sdasdouble complex csqrt(double complex); 106174617Sdasfloat complex csqrtf(float complex); 107177761Sdaslong double complex 108177761Sdas csqrtl(long double complex); 109226458Sdasdouble complex ctan(double complex); 110226458Sdasfloat complex ctanf(float complex); 111226458Sdasdouble complex ctanh(double complex); 112226458Sdasfloat complex ctanhf(float complex); 11378172Sru 11478172Sru__END_DECLS 11578172Sru 11678172Sru#endif /* _COMPLEX_H */ 117