1 /*- 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__ 35 #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 46 #if __STDC_VERSION__ >= 201112L 47 #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 }) 50 #endif 51 52 __BEGIN_DECLS 53 54 /* 7.3.5 Trigonometric functions */ 55 /* 7.3.5.1 The cacos functions */ 56 57 #if __BIONIC_AVAILABILITY_GUARD(23) 58 double complex cacos(double complex __z) __INTRODUCED_IN(23); 59 float complex cacosf(float complex __z) __INTRODUCED_IN(23); 60 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 61 62 63 #if __BIONIC_AVAILABILITY_GUARD(26) 64 long double complex cacosl(long double complex __z) __INTRODUCED_IN(26); 65 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 66 67 /* 7.3.5.2 The casin functions */ 68 69 #if __BIONIC_AVAILABILITY_GUARD(23) 70 double complex casin(double complex __z) __INTRODUCED_IN(23); 71 float complex casinf(float complex __z) __INTRODUCED_IN(23); 72 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 73 74 75 #if __BIONIC_AVAILABILITY_GUARD(26) 76 long double complex casinl(long double complex __z) __INTRODUCED_IN(26); 77 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 78 79 /* 7.3.5.1 The catan functions */ 80 81 #if __BIONIC_AVAILABILITY_GUARD(23) 82 double complex catan(double complex __z) __INTRODUCED_IN(23); 83 float complex catanf(float complex __z) __INTRODUCED_IN(23); 84 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 85 86 87 #if __BIONIC_AVAILABILITY_GUARD(26) 88 long double complex catanl(long double complex __z) __INTRODUCED_IN(26); 89 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 90 91 /* 7.3.5.1 The ccos functions */ 92 93 #if __BIONIC_AVAILABILITY_GUARD(23) 94 double complex ccos(double complex __z) __INTRODUCED_IN(23); 95 float complex ccosf(float complex __z) __INTRODUCED_IN(23); 96 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 97 98 99 #if __BIONIC_AVAILABILITY_GUARD(26) 100 long double complex ccosl(long double complex __z) __INTRODUCED_IN(26); 101 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 102 103 /* 7.3.5.1 The csin functions */ 104 105 #if __BIONIC_AVAILABILITY_GUARD(23) 106 double complex csin(double complex __z) __INTRODUCED_IN(23); 107 float complex csinf(float complex __z) __INTRODUCED_IN(23); 108 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 109 110 111 #if __BIONIC_AVAILABILITY_GUARD(26) 112 long double complex csinl(long double complex __z) __INTRODUCED_IN(26); 113 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 114 115 /* 7.3.5.1 The ctan functions */ 116 117 #if __BIONIC_AVAILABILITY_GUARD(23) 118 double complex ctan(double complex __z) __INTRODUCED_IN(23); 119 float complex ctanf(float complex __z) __INTRODUCED_IN(23); 120 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 121 122 123 #if __BIONIC_AVAILABILITY_GUARD(26) 124 long double complex ctanl(long double complex __z) __INTRODUCED_IN(26); 125 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 126 127 128 /* 7.3.6 Hyperbolic functions */ 129 /* 7.3.6.1 The cacosh functions */ 130 131 #if __BIONIC_AVAILABILITY_GUARD(23) 132 double complex cacosh(double complex __z) __INTRODUCED_IN(23); 133 float complex cacoshf(float complex __z) __INTRODUCED_IN(23); 134 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 135 136 137 #if __BIONIC_AVAILABILITY_GUARD(26) 138 long double complex cacoshl(long double complex __z) __INTRODUCED_IN(26); 139 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 140 141 /* 7.3.6.2 The casinh functions */ 142 143 #if __BIONIC_AVAILABILITY_GUARD(23) 144 double complex casinh(double complex __z) __INTRODUCED_IN(23); 145 float complex casinhf(float complex __z) __INTRODUCED_IN(23); 146 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 147 148 149 #if __BIONIC_AVAILABILITY_GUARD(26) 150 long double complex casinhl(long double complex __z) __INTRODUCED_IN(26); 151 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 152 153 /* 7.3.6.3 The catanh functions */ 154 155 #if __BIONIC_AVAILABILITY_GUARD(23) 156 double complex catanh(double complex __z) __INTRODUCED_IN(23); 157 float complex catanhf(float complex __z) __INTRODUCED_IN(23); 158 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 159 160 161 #if __BIONIC_AVAILABILITY_GUARD(26) 162 long double complex catanhl(long double complex __z) __INTRODUCED_IN(26); 163 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 164 165 /* 7.3.6.4 The ccosh functions */ 166 167 #if __BIONIC_AVAILABILITY_GUARD(23) 168 double complex ccosh(double complex __z) __INTRODUCED_IN(23); 169 float complex ccoshf(float complex __z) __INTRODUCED_IN(23); 170 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 171 172 173 #if __BIONIC_AVAILABILITY_GUARD(26) 174 long double complex ccoshl(long double complex __z) __INTRODUCED_IN(26); 175 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 176 177 /* 7.3.6.5 The csinh functions */ 178 179 #if __BIONIC_AVAILABILITY_GUARD(23) 180 double complex csinh(double complex __z) __INTRODUCED_IN(23); 181 float complex csinhf(float complex __z) __INTRODUCED_IN(23); 182 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 183 184 185 #if __BIONIC_AVAILABILITY_GUARD(26) 186 long double complex csinhl(long double complex __z) __INTRODUCED_IN(26); 187 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 188 189 /* 7.3.6.6 The ctanh functions */ 190 191 #if __BIONIC_AVAILABILITY_GUARD(23) 192 double complex ctanh(double complex __z) __INTRODUCED_IN(23); 193 float complex ctanhf(float complex __z) __INTRODUCED_IN(23); 194 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 195 196 197 #if __BIONIC_AVAILABILITY_GUARD(26) 198 long double complex ctanhl(long double complex __z) __INTRODUCED_IN(26); 199 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 200 201 202 /* 7.3.7 Exponential and logarithmic functions */ 203 /* 7.3.7.1 The cexp functions */ 204 205 #if __BIONIC_AVAILABILITY_GUARD(23) 206 double complex cexp(double complex __z) __INTRODUCED_IN(23); 207 float complex cexpf(float complex __z) __INTRODUCED_IN(23); 208 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 209 210 211 #if __BIONIC_AVAILABILITY_GUARD(26) 212 long double complex cexpl(long double complex __z) __INTRODUCED_IN(26); 213 /* 7.3.7.2 The clog functions */ 214 double complex clog(double complex __z) __INTRODUCED_IN(26); 215 float complex clogf(float complex __z) __INTRODUCED_IN(26); 216 long double complex clogl(long double complex __z) __INTRODUCED_IN(26); 217 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 218 219 220 /* 7.3.8 Power and absolute-value functions */ 221 /* 7.3.8.1 The cabs functions */ 222 223 #if __BIONIC_AVAILABILITY_GUARD(23) 224 double cabs(double complex __z) __INTRODUCED_IN(23); 225 float cabsf(float complex __z) __INTRODUCED_IN(23); 226 long double cabsl(long double complex __z) __INTRODUCED_IN(23); 227 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 228 229 /* 7.3.8.2 The cpow functions */ 230 231 #if __BIONIC_AVAILABILITY_GUARD(26) 232 double complex cpow(double complex __x, double complex __z) __INTRODUCED_IN(26); 233 float complex cpowf(float complex __x, float complex __z) __INTRODUCED_IN(26); 234 long double complex cpowl(long double complex __x, long double complex __z) __INTRODUCED_IN(26); 235 #endif /* __BIONIC_AVAILABILITY_GUARD(26) */ 236 237 /* 7.3.8.3 The csqrt functions */ 238 239 #if __BIONIC_AVAILABILITY_GUARD(23) 240 double complex csqrt(double complex __z) __INTRODUCED_IN(23); 241 float complex csqrtf(float complex __z) __INTRODUCED_IN(23); 242 long double complex csqrtl(long double complex __z) __INTRODUCED_IN(23); 243 244 /* 7.3.9 Manipulation functions */ 245 /* 7.3.9.1 The carg functions */ 246 double carg(double complex __z) __INTRODUCED_IN(23); 247 float cargf(float complex __z) __INTRODUCED_IN(23); 248 long double cargl(long double complex __z) __INTRODUCED_IN(23); 249 /* 7.3.9.2 The cimag functions */ 250 double cimag(double complex __z) __INTRODUCED_IN(23); 251 float cimagf(float complex __z) __INTRODUCED_IN(23); 252 long double cimagl(long double complex __z) __INTRODUCED_IN(23); 253 /* 7.3.9.3 The conj functions */ 254 double complex conj(double complex __z) __INTRODUCED_IN(23); 255 float complex conjf(float complex __z) __INTRODUCED_IN(23); 256 long double complex conjl(long double complex __z) __INTRODUCED_IN(23); 257 /* 7.3.9.4 The cproj functions */ 258 double complex cproj(double complex __z) __INTRODUCED_IN(23); 259 float complex cprojf(float complex __z) __INTRODUCED_IN(23); 260 long double complex cprojl(long double complex __z) __INTRODUCED_IN(23); 261 /* 7.3.9.5 The creal functions */ 262 double creal(double complex __z) __INTRODUCED_IN(23); 263 float crealf(float complex __z) __INTRODUCED_IN(23); 264 long double creall(long double complex __z) __INTRODUCED_IN(23); 265 #endif /* __BIONIC_AVAILABILITY_GUARD(23) */ 266 267 268 __END_DECLS 269 270 #endif 271