xref: /reactos/sdk/include/ucrt/complex.h (revision 04e0dc4a)
1*04e0dc4aSTimo Kreuzer //
2*04e0dc4aSTimo Kreuzer // complex.h
3*04e0dc4aSTimo Kreuzer //
4*04e0dc4aSTimo Kreuzer //      Copyright (c) Microsoft Corporation. All rights reserved.
5*04e0dc4aSTimo Kreuzer //
6*04e0dc4aSTimo Kreuzer // The complex math library.
7*04e0dc4aSTimo Kreuzer //
8*04e0dc4aSTimo Kreuzer #pragma once
9*04e0dc4aSTimo Kreuzer #ifndef _COMPLEX
10*04e0dc4aSTimo Kreuzer #define _COMPLEX
11*04e0dc4aSTimo Kreuzer 
12*04e0dc4aSTimo Kreuzer #include <corecrt.h>
13*04e0dc4aSTimo Kreuzer 
14*04e0dc4aSTimo Kreuzer #if (_CRT_HAS_CXX17 == 1) && !defined(_CRT_USE_C_COMPLEX_H)
15*04e0dc4aSTimo Kreuzer #include <ccomplex>
16*04e0dc4aSTimo Kreuzer #else // ^^^^ /std:c++17 ^^^^ // vvvv _CRT_USE_C_COMPLEX_H vvvv
17*04e0dc4aSTimo Kreuzer 
18*04e0dc4aSTimo Kreuzer #pragma warning(push)
19*04e0dc4aSTimo Kreuzer #pragma warning(disable: _UCRT_DISABLED_WARNINGS)
20*04e0dc4aSTimo Kreuzer _UCRT_DISABLE_CLANG_WARNINGS
21*04e0dc4aSTimo Kreuzer 
22*04e0dc4aSTimo Kreuzer _CRT_BEGIN_C_HEADER
23*04e0dc4aSTimo Kreuzer 
24*04e0dc4aSTimo Kreuzer //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
25*04e0dc4aSTimo Kreuzer //
26*04e0dc4aSTimo Kreuzer // Types
27*04e0dc4aSTimo Kreuzer //
28*04e0dc4aSTimo Kreuzer //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29*04e0dc4aSTimo Kreuzer #ifndef _C_COMPLEX_T
30*04e0dc4aSTimo Kreuzer     #define _C_COMPLEX_T
31*04e0dc4aSTimo Kreuzer     typedef struct _C_double_complex
32*04e0dc4aSTimo Kreuzer     {
33*04e0dc4aSTimo Kreuzer         double _Val[2];
34*04e0dc4aSTimo Kreuzer     } _C_double_complex;
35*04e0dc4aSTimo Kreuzer 
36*04e0dc4aSTimo Kreuzer     typedef struct _C_float_complex
37*04e0dc4aSTimo Kreuzer     {
38*04e0dc4aSTimo Kreuzer         float _Val[2];
39*04e0dc4aSTimo Kreuzer     } _C_float_complex;
40*04e0dc4aSTimo Kreuzer 
41*04e0dc4aSTimo Kreuzer     typedef struct _C_ldouble_complex
42*04e0dc4aSTimo Kreuzer     {
43*04e0dc4aSTimo Kreuzer         long double _Val[2];
44*04e0dc4aSTimo Kreuzer     } _C_ldouble_complex;
45*04e0dc4aSTimo Kreuzer #endif
46*04e0dc4aSTimo Kreuzer 
47*04e0dc4aSTimo Kreuzer typedef _C_double_complex  _Dcomplex;
48*04e0dc4aSTimo Kreuzer typedef _C_float_complex   _Fcomplex;
49*04e0dc4aSTimo Kreuzer typedef _C_ldouble_complex _Lcomplex;
50*04e0dc4aSTimo Kreuzer 
51*04e0dc4aSTimo Kreuzer 
52*04e0dc4aSTimo Kreuzer 
53*04e0dc4aSTimo Kreuzer //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54*04e0dc4aSTimo Kreuzer //
55*04e0dc4aSTimo Kreuzer // Macros
56*04e0dc4aSTimo Kreuzer //
57*04e0dc4aSTimo Kreuzer //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58*04e0dc4aSTimo Kreuzer #define _DCOMPLEX_(re, im)  _Cbuild(re, im)
59*04e0dc4aSTimo Kreuzer #define _FCOMPLEX_(re, im)  _FCbuild(re, im)
60*04e0dc4aSTimo Kreuzer #define _LCOMPLEX_(re, im)  _LCbuild(re, im)
61*04e0dc4aSTimo Kreuzer 
62*04e0dc4aSTimo Kreuzer #define _Complex_I _FCbuild(0.0F, 1.0F)
63*04e0dc4aSTimo Kreuzer #define I          _Complex_I
64*04e0dc4aSTimo Kreuzer 
65*04e0dc4aSTimo Kreuzer 
66*04e0dc4aSTimo Kreuzer 
67*04e0dc4aSTimo Kreuzer //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68*04e0dc4aSTimo Kreuzer //
69*04e0dc4aSTimo Kreuzer // Functions
70*04e0dc4aSTimo Kreuzer //
71*04e0dc4aSTimo Kreuzer //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
72*04e0dc4aSTimo Kreuzer _ACRTIMP double    __cdecl cabs(_In_ _Dcomplex _Z);
73*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl cacos(_In_ _Dcomplex _Z);
74*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl cacosh(_In_ _Dcomplex _Z);
75*04e0dc4aSTimo Kreuzer _ACRTIMP double    __cdecl carg(_In_ _Dcomplex _Z);
76*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl casin(_In_ _Dcomplex _Z);
77*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl casinh(_In_ _Dcomplex _Z);
78*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl catan(_In_ _Dcomplex _Z);
79*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl catanh(_In_ _Dcomplex _Z);
80*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl ccos(_In_ _Dcomplex _Z);
81*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl ccosh(_In_ _Dcomplex _Z);
82*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl cexp(_In_ _Dcomplex _Z);
83*04e0dc4aSTimo Kreuzer _ACRTIMP double    __cdecl cimag(_In_ _Dcomplex _Z);
84*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl clog(_In_ _Dcomplex _Z);
85*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl clog10(_In_ _Dcomplex _Z);
86*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl conj(_In_ _Dcomplex _Z);
87*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl cpow(_In_ _Dcomplex _X, _In_ _Dcomplex _Y);
88*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl cproj(_In_ _Dcomplex _Z);
89*04e0dc4aSTimo Kreuzer _ACRTIMP double    __cdecl creal(_In_ _Dcomplex _Z);
90*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl csin(_In_ _Dcomplex _Z);
91*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl csinh(_In_ _Dcomplex _Z);
92*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl csqrt(_In_ _Dcomplex _Z);
93*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl ctan(_In_ _Dcomplex _Z);
94*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl ctanh(_In_ _Dcomplex _Z);
95*04e0dc4aSTimo Kreuzer _ACRTIMP double    __cdecl norm(_In_ _Dcomplex _Z);
96*04e0dc4aSTimo Kreuzer 
97*04e0dc4aSTimo Kreuzer _ACRTIMP float     __cdecl cabsf(_In_ _Fcomplex _Z);
98*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl cacosf(_In_ _Fcomplex _Z);
99*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl cacoshf(_In_ _Fcomplex _Z);
100*04e0dc4aSTimo Kreuzer _ACRTIMP float     __cdecl cargf(_In_ _Fcomplex _Z);
101*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl casinf(_In_ _Fcomplex _Z);
102*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl casinhf(_In_ _Fcomplex _Z);
103*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl catanf(_In_ _Fcomplex _Z);
104*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl catanhf(_In_ _Fcomplex _Z);
105*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl ccosf(_In_ _Fcomplex _Z);
106*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl ccoshf(_In_ _Fcomplex _Z);
107*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl cexpf(_In_ _Fcomplex _Z);
108*04e0dc4aSTimo Kreuzer _ACRTIMP float     __cdecl cimagf(_In_ _Fcomplex _Z);
109*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl clogf(_In_ _Fcomplex _Z);
110*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl clog10f(_In_ _Fcomplex _Z);
111*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl conjf(_In_ _Fcomplex _Z);
112*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl cpowf(_In_ _Fcomplex _X, _In_ _Fcomplex _Y);
113*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl cprojf(_In_ _Fcomplex _Z);
114*04e0dc4aSTimo Kreuzer _ACRTIMP float     __cdecl crealf(_In_ _Fcomplex _Z);
115*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl csinf(_In_ _Fcomplex _Z);
116*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl csinhf(_In_ _Fcomplex _Z);
117*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl csqrtf(_In_ _Fcomplex _Z);
118*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl ctanf(_In_ _Fcomplex _Z);
119*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl ctanhf(_In_ _Fcomplex _Z);
120*04e0dc4aSTimo Kreuzer _ACRTIMP float     __cdecl normf(_In_ _Fcomplex _Z);
121*04e0dc4aSTimo Kreuzer 
122*04e0dc4aSTimo Kreuzer _ACRTIMP long double __cdecl cabsl(_In_ _Lcomplex _Z);
123*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl cacosl(_In_ _Lcomplex _Z);
124*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl cacoshl(_In_ _Lcomplex _Z);
125*04e0dc4aSTimo Kreuzer _ACRTIMP long double __cdecl cargl(_In_ _Lcomplex _Z);
126*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl casinl(_In_ _Lcomplex _Z);
127*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl casinhl(_In_ _Lcomplex _Z);
128*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl catanl(_In_ _Lcomplex _Z);
129*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl catanhl(_In_ _Lcomplex _Z);
130*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl ccosl(_In_ _Lcomplex _Z);
131*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl ccoshl(_In_ _Lcomplex _Z);
132*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl cexpl(_In_ _Lcomplex _Z);
133*04e0dc4aSTimo Kreuzer _ACRTIMP long double __cdecl cimagl(_In_ _Lcomplex _Z);
134*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl clogl(_In_ _Lcomplex _Z);
135*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl clog10l(_In_ _Lcomplex _Z);
136*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl conjl(_In_ _Lcomplex _Z);
137*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl cpowl(_In_ _Lcomplex _X, _In_ _Lcomplex _Y);
138*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl cprojl(_In_ _Lcomplex _Z);
139*04e0dc4aSTimo Kreuzer _ACRTIMP long double __cdecl creall(_In_ _Lcomplex _Z);
140*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl csinl(_In_ _Lcomplex _Z);
141*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl csinhl(_In_ _Lcomplex _Z);
142*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl csqrtl(_In_ _Lcomplex _Z);
143*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl ctanl(_In_ _Lcomplex _Z);
144*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex   __cdecl ctanhl(_In_ _Lcomplex _Z);
145*04e0dc4aSTimo Kreuzer _ACRTIMP long double __cdecl norml(_In_ _Lcomplex _Z);
146*04e0dc4aSTimo Kreuzer 
147*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl _Cbuild(_In_ double _Re, _In_ double _Im);
148*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl _Cmulcc(_In_ _Dcomplex _X, _In_ _Dcomplex _Y);
149*04e0dc4aSTimo Kreuzer _ACRTIMP _Dcomplex __cdecl _Cmulcr(_In_ _Dcomplex _X, _In_ double _Y);
150*04e0dc4aSTimo Kreuzer 
151*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl _FCbuild(_In_ float _Re, _In_ float _Im);
152*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl _FCmulcc(_In_ _Fcomplex _X, _In_ _Fcomplex _Y);
153*04e0dc4aSTimo Kreuzer _ACRTIMP _Fcomplex __cdecl _FCmulcr(_In_ _Fcomplex _X, _In_ float _Y);
154*04e0dc4aSTimo Kreuzer 
155*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex __cdecl _LCbuild(_In_ long double _Re, _In_ long double _Im);
156*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex __cdecl _LCmulcc(_In_ _Lcomplex _X, _In_ _Lcomplex _Y);
157*04e0dc4aSTimo Kreuzer _ACRTIMP _Lcomplex __cdecl _LCmulcr(_In_ _Lcomplex _X, _In_ long double _Y);
158*04e0dc4aSTimo Kreuzer 
159*04e0dc4aSTimo Kreuzer 
160*04e0dc4aSTimo Kreuzer 
161*04e0dc4aSTimo Kreuzer #ifdef __cplusplus
162*04e0dc4aSTimo Kreuzer extern "C++"
163*04e0dc4aSTimo Kreuzer {
164*04e0dc4aSTimo Kreuzer     //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
165*04e0dc4aSTimo Kreuzer     //
166*04e0dc4aSTimo Kreuzer     // double complex overloads
167*04e0dc4aSTimo Kreuzer     //
168*04e0dc4aSTimo Kreuzer     //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
acos(_In_ _Dcomplex _X)169*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL acos(_In_ _Dcomplex _X) throw()
170*04e0dc4aSTimo Kreuzer     {
171*04e0dc4aSTimo Kreuzer         return cacos(_X);
172*04e0dc4aSTimo Kreuzer     }
173*04e0dc4aSTimo Kreuzer 
acosh(_In_ _Dcomplex _X)174*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL acosh(_In_ _Dcomplex _X) throw()
175*04e0dc4aSTimo Kreuzer     {
176*04e0dc4aSTimo Kreuzer         return cacosh(_X);
177*04e0dc4aSTimo Kreuzer     }
178*04e0dc4aSTimo Kreuzer 
asin(_In_ _Dcomplex _X)179*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL asin(_In_ _Dcomplex _X) throw()
180*04e0dc4aSTimo Kreuzer     {
181*04e0dc4aSTimo Kreuzer         return casin(_X);
182*04e0dc4aSTimo Kreuzer     }
183*04e0dc4aSTimo Kreuzer 
asinh(_In_ _Dcomplex _X)184*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL asinh(_In_ _Dcomplex _X) throw()
185*04e0dc4aSTimo Kreuzer     {
186*04e0dc4aSTimo Kreuzer         return casinh(_X);
187*04e0dc4aSTimo Kreuzer     }
188*04e0dc4aSTimo Kreuzer 
atan(_In_ _Dcomplex _X)189*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL atan(_In_ _Dcomplex _X) throw()
190*04e0dc4aSTimo Kreuzer     {
191*04e0dc4aSTimo Kreuzer         return catan(_X);
192*04e0dc4aSTimo Kreuzer     }
193*04e0dc4aSTimo Kreuzer 
atanh(_In_ _Dcomplex _X)194*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL atanh(_In_ _Dcomplex _X) throw()
195*04e0dc4aSTimo Kreuzer     {
196*04e0dc4aSTimo Kreuzer         return catanh(_X);
197*04e0dc4aSTimo Kreuzer     }
198*04e0dc4aSTimo Kreuzer 
cos(_In_ _Dcomplex _X)199*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL cos(_In_ _Dcomplex _X) throw()
200*04e0dc4aSTimo Kreuzer     {
201*04e0dc4aSTimo Kreuzer         return ccos(_X);
202*04e0dc4aSTimo Kreuzer     }
203*04e0dc4aSTimo Kreuzer 
cosh(_In_ _Dcomplex _X)204*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL cosh(_In_ _Dcomplex _X) throw()
205*04e0dc4aSTimo Kreuzer     {
206*04e0dc4aSTimo Kreuzer         return ccosh(_X);
207*04e0dc4aSTimo Kreuzer     }
208*04e0dc4aSTimo Kreuzer 
proj(_In_ _Dcomplex _X)209*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL proj(_In_ _Dcomplex _X) throw()
210*04e0dc4aSTimo Kreuzer     {
211*04e0dc4aSTimo Kreuzer         return cproj(_X);
212*04e0dc4aSTimo Kreuzer     }
213*04e0dc4aSTimo Kreuzer 
exp(_In_ _Dcomplex _X)214*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL exp(_In_ _Dcomplex _X) throw()
215*04e0dc4aSTimo Kreuzer     {
216*04e0dc4aSTimo Kreuzer         return cexp(_X);
217*04e0dc4aSTimo Kreuzer     }
218*04e0dc4aSTimo Kreuzer 
log(_In_ _Dcomplex _X)219*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL log(_In_ _Dcomplex _X) throw()
220*04e0dc4aSTimo Kreuzer     {
221*04e0dc4aSTimo Kreuzer         return clog(_X);
222*04e0dc4aSTimo Kreuzer     }
223*04e0dc4aSTimo Kreuzer 
log10(_In_ _Dcomplex _X)224*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL log10(_In_ _Dcomplex _X) throw()
225*04e0dc4aSTimo Kreuzer     {
226*04e0dc4aSTimo Kreuzer         return clog10(_X);
227*04e0dc4aSTimo Kreuzer     }
228*04e0dc4aSTimo Kreuzer 
pow(_In_ _Dcomplex _X,_In_ _Dcomplex _Y)229*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL pow(_In_ _Dcomplex _X, _In_ _Dcomplex _Y) throw()
230*04e0dc4aSTimo Kreuzer     {
231*04e0dc4aSTimo Kreuzer         return cpow(_X, _Y);
232*04e0dc4aSTimo Kreuzer     }
233*04e0dc4aSTimo Kreuzer 
sin(_In_ _Dcomplex _X)234*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL sin(_In_ _Dcomplex _X) throw()
235*04e0dc4aSTimo Kreuzer     {
236*04e0dc4aSTimo Kreuzer         return csin(_X);
237*04e0dc4aSTimo Kreuzer     }
238*04e0dc4aSTimo Kreuzer 
sinh(_In_ _Dcomplex _X)239*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL sinh(_In_ _Dcomplex _X) throw()
240*04e0dc4aSTimo Kreuzer     {
241*04e0dc4aSTimo Kreuzer         return csinh(_X);
242*04e0dc4aSTimo Kreuzer     }
243*04e0dc4aSTimo Kreuzer 
sqrt(_In_ _Dcomplex _X)244*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL sqrt(_In_ _Dcomplex _X) throw()
245*04e0dc4aSTimo Kreuzer     {
246*04e0dc4aSTimo Kreuzer         return csqrt(_X);
247*04e0dc4aSTimo Kreuzer     }
248*04e0dc4aSTimo Kreuzer 
tan(_In_ _Dcomplex _X)249*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL tan(_In_ _Dcomplex _X) throw()
250*04e0dc4aSTimo Kreuzer     {
251*04e0dc4aSTimo Kreuzer         return ctan(_X);
252*04e0dc4aSTimo Kreuzer     }
253*04e0dc4aSTimo Kreuzer 
tanh(_In_ _Dcomplex _X)254*04e0dc4aSTimo Kreuzer     inline _Dcomplex __CRTDECL tanh(_In_ _Dcomplex _X) throw()
255*04e0dc4aSTimo Kreuzer     {
256*04e0dc4aSTimo Kreuzer         return ctanh(_X);
257*04e0dc4aSTimo Kreuzer     }
258*04e0dc4aSTimo Kreuzer 
abs(_In_ _Dcomplex _X)259*04e0dc4aSTimo Kreuzer     inline double __CRTDECL abs(_In_ _Dcomplex _X) throw()
260*04e0dc4aSTimo Kreuzer     {
261*04e0dc4aSTimo Kreuzer         return cabs(_X);
262*04e0dc4aSTimo Kreuzer     }
263*04e0dc4aSTimo Kreuzer 
arg(_In_ _Dcomplex _X)264*04e0dc4aSTimo Kreuzer     inline double __CRTDECL arg(_In_ _Dcomplex _X) throw()
265*04e0dc4aSTimo Kreuzer     {
266*04e0dc4aSTimo Kreuzer         return carg(_X);
267*04e0dc4aSTimo Kreuzer     }
268*04e0dc4aSTimo Kreuzer 
imag(_In_ _Dcomplex _X)269*04e0dc4aSTimo Kreuzer     inline double __CRTDECL imag(_In_ _Dcomplex _X) throw()
270*04e0dc4aSTimo Kreuzer     {
271*04e0dc4aSTimo Kreuzer         return cimag(_X);
272*04e0dc4aSTimo Kreuzer     }
273*04e0dc4aSTimo Kreuzer 
real(_In_ _Dcomplex _X)274*04e0dc4aSTimo Kreuzer     inline double __CRTDECL real(_In_ _Dcomplex _X) throw()
275*04e0dc4aSTimo Kreuzer     {
276*04e0dc4aSTimo Kreuzer         return creal(_X);
277*04e0dc4aSTimo Kreuzer     }
278*04e0dc4aSTimo Kreuzer 
279*04e0dc4aSTimo Kreuzer 
280*04e0dc4aSTimo Kreuzer 
281*04e0dc4aSTimo Kreuzer     //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
282*04e0dc4aSTimo Kreuzer     //
283*04e0dc4aSTimo Kreuzer     // float complex overloads
284*04e0dc4aSTimo Kreuzer     //
285*04e0dc4aSTimo Kreuzer     //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
acos(_In_ _Fcomplex _X)286*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL acos(_In_ _Fcomplex _X) throw()
287*04e0dc4aSTimo Kreuzer     {
288*04e0dc4aSTimo Kreuzer         return cacosf(_X);
289*04e0dc4aSTimo Kreuzer     }
290*04e0dc4aSTimo Kreuzer 
acosh(_In_ _Fcomplex _X)291*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL acosh(_In_ _Fcomplex _X) throw()
292*04e0dc4aSTimo Kreuzer     {
293*04e0dc4aSTimo Kreuzer         return cacoshf(_X);
294*04e0dc4aSTimo Kreuzer     }
295*04e0dc4aSTimo Kreuzer 
asin(_In_ _Fcomplex _X)296*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL asin(_In_ _Fcomplex _X) throw()
297*04e0dc4aSTimo Kreuzer     {
298*04e0dc4aSTimo Kreuzer         return casinf(_X);
299*04e0dc4aSTimo Kreuzer     }
300*04e0dc4aSTimo Kreuzer 
asinh(_In_ _Fcomplex _X)301*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL asinh(_In_ _Fcomplex _X) throw()
302*04e0dc4aSTimo Kreuzer     {
303*04e0dc4aSTimo Kreuzer         return casinhf(_X);
304*04e0dc4aSTimo Kreuzer     }
305*04e0dc4aSTimo Kreuzer 
atan(_In_ _Fcomplex _X)306*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL atan(_In_ _Fcomplex _X) throw()
307*04e0dc4aSTimo Kreuzer     {
308*04e0dc4aSTimo Kreuzer         return catanf(_X);
309*04e0dc4aSTimo Kreuzer     }
310*04e0dc4aSTimo Kreuzer 
atanh(_In_ _Fcomplex _X)311*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL atanh(_In_ _Fcomplex _X) throw()
312*04e0dc4aSTimo Kreuzer     {
313*04e0dc4aSTimo Kreuzer         return catanhf(_X);
314*04e0dc4aSTimo Kreuzer     }
315*04e0dc4aSTimo Kreuzer 
conj(_In_ _Fcomplex _X)316*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL conj(_In_ _Fcomplex _X) throw()
317*04e0dc4aSTimo Kreuzer     {
318*04e0dc4aSTimo Kreuzer         return conjf(_X);
319*04e0dc4aSTimo Kreuzer     }
320*04e0dc4aSTimo Kreuzer 
cos(_In_ _Fcomplex _X)321*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL cos(_In_ _Fcomplex _X) throw()
322*04e0dc4aSTimo Kreuzer     {
323*04e0dc4aSTimo Kreuzer         return ccosf(_X);
324*04e0dc4aSTimo Kreuzer     }
325*04e0dc4aSTimo Kreuzer 
cosh(_In_ _Fcomplex _X)326*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL cosh(_In_ _Fcomplex _X) throw()
327*04e0dc4aSTimo Kreuzer     {
328*04e0dc4aSTimo Kreuzer         return ccoshf(_X);
329*04e0dc4aSTimo Kreuzer     }
330*04e0dc4aSTimo Kreuzer 
cproj(_In_ _Fcomplex _X)331*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL cproj(_In_ _Fcomplex _X) throw()
332*04e0dc4aSTimo Kreuzer     {
333*04e0dc4aSTimo Kreuzer         return cprojf(_X);
334*04e0dc4aSTimo Kreuzer     }
335*04e0dc4aSTimo Kreuzer 
proj(_In_ _Fcomplex _X)336*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL proj(_In_ _Fcomplex _X) throw()
337*04e0dc4aSTimo Kreuzer     {
338*04e0dc4aSTimo Kreuzer         return cprojf(_X);
339*04e0dc4aSTimo Kreuzer     }
340*04e0dc4aSTimo Kreuzer 
exp(_In_ _Fcomplex _X)341*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL exp(_In_ _Fcomplex _X) throw()
342*04e0dc4aSTimo Kreuzer     {
343*04e0dc4aSTimo Kreuzer         return cexpf(_X);
344*04e0dc4aSTimo Kreuzer     }
345*04e0dc4aSTimo Kreuzer 
log(_In_ _Fcomplex _X)346*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL log(_In_ _Fcomplex _X) throw()
347*04e0dc4aSTimo Kreuzer     {
348*04e0dc4aSTimo Kreuzer         return clogf(_X);
349*04e0dc4aSTimo Kreuzer     }
350*04e0dc4aSTimo Kreuzer 
log10(_In_ _Fcomplex _X)351*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL log10(_In_ _Fcomplex _X) throw()
352*04e0dc4aSTimo Kreuzer     {
353*04e0dc4aSTimo Kreuzer         return clog10f(_X);
354*04e0dc4aSTimo Kreuzer     }
355*04e0dc4aSTimo Kreuzer 
norm(_In_ _Fcomplex _X)356*04e0dc4aSTimo Kreuzer     inline float __CRTDECL norm(_In_ _Fcomplex _X) throw()
357*04e0dc4aSTimo Kreuzer     {
358*04e0dc4aSTimo Kreuzer         return normf(_X);
359*04e0dc4aSTimo Kreuzer     }
360*04e0dc4aSTimo Kreuzer 
pow(_In_ _Fcomplex _X,_In_ _Fcomplex _Y)361*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL pow(_In_ _Fcomplex _X, _In_ _Fcomplex _Y) throw()
362*04e0dc4aSTimo Kreuzer     {
363*04e0dc4aSTimo Kreuzer         return cpowf(_X, _Y);
364*04e0dc4aSTimo Kreuzer     }
365*04e0dc4aSTimo Kreuzer 
sin(_In_ _Fcomplex _X)366*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL sin(_In_ _Fcomplex _X) throw()
367*04e0dc4aSTimo Kreuzer     {
368*04e0dc4aSTimo Kreuzer         return csinf(_X);
369*04e0dc4aSTimo Kreuzer     }
370*04e0dc4aSTimo Kreuzer 
sinh(_In_ _Fcomplex _X)371*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL sinh(_In_ _Fcomplex _X) throw()
372*04e0dc4aSTimo Kreuzer     {
373*04e0dc4aSTimo Kreuzer         return csinhf(_X);
374*04e0dc4aSTimo Kreuzer     }
375*04e0dc4aSTimo Kreuzer 
sqrt(_In_ _Fcomplex _X)376*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL sqrt(_In_ _Fcomplex _X) throw()
377*04e0dc4aSTimo Kreuzer     {
378*04e0dc4aSTimo Kreuzer         return csqrtf(_X);
379*04e0dc4aSTimo Kreuzer     }
380*04e0dc4aSTimo Kreuzer 
tan(_In_ _Fcomplex _X)381*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL tan(_In_ _Fcomplex _X) throw()
382*04e0dc4aSTimo Kreuzer     {
383*04e0dc4aSTimo Kreuzer         return ctanf(_X);
384*04e0dc4aSTimo Kreuzer     }
385*04e0dc4aSTimo Kreuzer 
tanh(_In_ _Fcomplex _X)386*04e0dc4aSTimo Kreuzer     inline _Fcomplex __CRTDECL tanh(_In_ _Fcomplex _X) throw()
387*04e0dc4aSTimo Kreuzer     {
388*04e0dc4aSTimo Kreuzer         return ctanhf(_X);
389*04e0dc4aSTimo Kreuzer     }
390*04e0dc4aSTimo Kreuzer 
abs(_In_ _Fcomplex _X)391*04e0dc4aSTimo Kreuzer     inline float __CRTDECL abs(_In_ _Fcomplex _X) throw()
392*04e0dc4aSTimo Kreuzer     {
393*04e0dc4aSTimo Kreuzer         return cabsf(_X);
394*04e0dc4aSTimo Kreuzer     }
395*04e0dc4aSTimo Kreuzer 
arg(_In_ _Fcomplex _X)396*04e0dc4aSTimo Kreuzer     inline float __CRTDECL arg(_In_ _Fcomplex _X) throw()
397*04e0dc4aSTimo Kreuzer     {
398*04e0dc4aSTimo Kreuzer         return cargf(_X);
399*04e0dc4aSTimo Kreuzer     }
400*04e0dc4aSTimo Kreuzer 
carg(_In_ _Fcomplex _X)401*04e0dc4aSTimo Kreuzer     inline float __CRTDECL carg(_In_ _Fcomplex _X) throw()
402*04e0dc4aSTimo Kreuzer     {
403*04e0dc4aSTimo Kreuzer         return cargf(_X);
404*04e0dc4aSTimo Kreuzer     }
405*04e0dc4aSTimo Kreuzer 
cimag(_In_ _Fcomplex _X)406*04e0dc4aSTimo Kreuzer     inline float __CRTDECL cimag(_In_ _Fcomplex _X) throw()
407*04e0dc4aSTimo Kreuzer     {
408*04e0dc4aSTimo Kreuzer         return cimagf(_X);
409*04e0dc4aSTimo Kreuzer     }
410*04e0dc4aSTimo Kreuzer 
creal(_In_ _Fcomplex _X)411*04e0dc4aSTimo Kreuzer     inline float __CRTDECL creal(_In_ _Fcomplex _X) throw()
412*04e0dc4aSTimo Kreuzer     {
413*04e0dc4aSTimo Kreuzer         return crealf(_X);
414*04e0dc4aSTimo Kreuzer     }
415*04e0dc4aSTimo Kreuzer 
imag(_In_ _Fcomplex _X)416*04e0dc4aSTimo Kreuzer     inline float __CRTDECL imag(_In_ _Fcomplex _X) throw()
417*04e0dc4aSTimo Kreuzer     {
418*04e0dc4aSTimo Kreuzer         return cimagf(_X);
419*04e0dc4aSTimo Kreuzer     }
420*04e0dc4aSTimo Kreuzer 
real(_In_ _Fcomplex _X)421*04e0dc4aSTimo Kreuzer     inline float __CRTDECL real(_In_ _Fcomplex _X) throw()
422*04e0dc4aSTimo Kreuzer     {
423*04e0dc4aSTimo Kreuzer         return crealf(_X);
424*04e0dc4aSTimo Kreuzer     }
425*04e0dc4aSTimo Kreuzer 
426*04e0dc4aSTimo Kreuzer 
427*04e0dc4aSTimo Kreuzer 
428*04e0dc4aSTimo Kreuzer     //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
429*04e0dc4aSTimo Kreuzer     //
430*04e0dc4aSTimo Kreuzer     // long double complex overloads
431*04e0dc4aSTimo Kreuzer     //
432*04e0dc4aSTimo Kreuzer     //-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
acos(_In_ _Lcomplex _X)433*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL acos(_In_ _Lcomplex _X) throw()
434*04e0dc4aSTimo Kreuzer     {
435*04e0dc4aSTimo Kreuzer         return cacosl(_X);
436*04e0dc4aSTimo Kreuzer     }
437*04e0dc4aSTimo Kreuzer 
acosh(_In_ _Lcomplex _X)438*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL acosh(_In_ _Lcomplex _X) throw()
439*04e0dc4aSTimo Kreuzer     {
440*04e0dc4aSTimo Kreuzer         return cacoshl(_X);
441*04e0dc4aSTimo Kreuzer     }
442*04e0dc4aSTimo Kreuzer 
asin(_In_ _Lcomplex _X)443*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL asin(_In_ _Lcomplex _X) throw()
444*04e0dc4aSTimo Kreuzer     {
445*04e0dc4aSTimo Kreuzer         return casinl(_X);
446*04e0dc4aSTimo Kreuzer     }
447*04e0dc4aSTimo Kreuzer 
asinh(_In_ _Lcomplex _X)448*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL asinh(_In_ _Lcomplex _X) throw()
449*04e0dc4aSTimo Kreuzer     {
450*04e0dc4aSTimo Kreuzer         return casinhl(_X);
451*04e0dc4aSTimo Kreuzer     }
452*04e0dc4aSTimo Kreuzer 
atan(_In_ _Lcomplex _X)453*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL atan(_In_ _Lcomplex _X) throw()
454*04e0dc4aSTimo Kreuzer     {
455*04e0dc4aSTimo Kreuzer         return catanl(_X);
456*04e0dc4aSTimo Kreuzer     }
457*04e0dc4aSTimo Kreuzer 
atanh(_In_ _Lcomplex _X)458*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL atanh(_In_ _Lcomplex _X) throw()
459*04e0dc4aSTimo Kreuzer     {
460*04e0dc4aSTimo Kreuzer         return catanhl(_X);
461*04e0dc4aSTimo Kreuzer     }
462*04e0dc4aSTimo Kreuzer 
conj(_In_ _Lcomplex _X)463*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL conj(_In_ _Lcomplex _X) throw()
464*04e0dc4aSTimo Kreuzer     {
465*04e0dc4aSTimo Kreuzer         return conjl(_X);
466*04e0dc4aSTimo Kreuzer     }
467*04e0dc4aSTimo Kreuzer 
cos(_In_ _Lcomplex _X)468*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL cos(_In_ _Lcomplex _X) throw()
469*04e0dc4aSTimo Kreuzer     {
470*04e0dc4aSTimo Kreuzer         return ccosl(_X);
471*04e0dc4aSTimo Kreuzer     }
472*04e0dc4aSTimo Kreuzer 
cosh(_In_ _Lcomplex _X)473*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL cosh(_In_ _Lcomplex _X) throw()
474*04e0dc4aSTimo Kreuzer     {
475*04e0dc4aSTimo Kreuzer         return ccoshl(_X);
476*04e0dc4aSTimo Kreuzer     }
477*04e0dc4aSTimo Kreuzer 
cproj(_In_ _Lcomplex _X)478*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL cproj(_In_ _Lcomplex _X) throw()
479*04e0dc4aSTimo Kreuzer     {
480*04e0dc4aSTimo Kreuzer         return cprojl(_X);
481*04e0dc4aSTimo Kreuzer     }
482*04e0dc4aSTimo Kreuzer 
proj(_In_ _Lcomplex _X)483*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL proj(_In_ _Lcomplex _X) throw()
484*04e0dc4aSTimo Kreuzer     {
485*04e0dc4aSTimo Kreuzer         return cprojl(_X);
486*04e0dc4aSTimo Kreuzer     }
487*04e0dc4aSTimo Kreuzer 
exp(_In_ _Lcomplex _X)488*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL exp(_In_ _Lcomplex _X) throw()
489*04e0dc4aSTimo Kreuzer     {
490*04e0dc4aSTimo Kreuzer         return cexpl(_X);
491*04e0dc4aSTimo Kreuzer     }
492*04e0dc4aSTimo Kreuzer 
log(_In_ _Lcomplex _X)493*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL log(_In_ _Lcomplex _X) throw()
494*04e0dc4aSTimo Kreuzer     {
495*04e0dc4aSTimo Kreuzer         return clogl(_X);
496*04e0dc4aSTimo Kreuzer     }
497*04e0dc4aSTimo Kreuzer 
log10(_In_ _Lcomplex _X)498*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL log10(_In_ _Lcomplex _X) throw()
499*04e0dc4aSTimo Kreuzer     {
500*04e0dc4aSTimo Kreuzer         return clog10l(_X);
501*04e0dc4aSTimo Kreuzer     }
502*04e0dc4aSTimo Kreuzer 
norm(_In_ _Lcomplex _X)503*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL norm(_In_ _Lcomplex _X) throw()
504*04e0dc4aSTimo Kreuzer     {
505*04e0dc4aSTimo Kreuzer         return norml(_X);
506*04e0dc4aSTimo Kreuzer     }
507*04e0dc4aSTimo Kreuzer 
pow(_In_ _Lcomplex _X,_In_ _Lcomplex _Y)508*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL pow(_In_ _Lcomplex _X, _In_ _Lcomplex _Y) throw()
509*04e0dc4aSTimo Kreuzer     {
510*04e0dc4aSTimo Kreuzer         return cpowl(_X, _Y);
511*04e0dc4aSTimo Kreuzer     }
512*04e0dc4aSTimo Kreuzer 
sin(_In_ _Lcomplex _X)513*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL sin(_In_ _Lcomplex _X) throw()
514*04e0dc4aSTimo Kreuzer     {
515*04e0dc4aSTimo Kreuzer         return csinl(_X);
516*04e0dc4aSTimo Kreuzer     }
517*04e0dc4aSTimo Kreuzer 
sinh(_In_ _Lcomplex _X)518*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL sinh(_In_ _Lcomplex _X) throw()
519*04e0dc4aSTimo Kreuzer     {
520*04e0dc4aSTimo Kreuzer         return csinhl(_X);
521*04e0dc4aSTimo Kreuzer     }
522*04e0dc4aSTimo Kreuzer 
sqrt(_In_ _Lcomplex _X)523*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL sqrt(_In_ _Lcomplex _X) throw()
524*04e0dc4aSTimo Kreuzer     {
525*04e0dc4aSTimo Kreuzer         return csqrtl(_X);
526*04e0dc4aSTimo Kreuzer     }
527*04e0dc4aSTimo Kreuzer 
tan(_In_ _Lcomplex _X)528*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL tan(_In_ _Lcomplex _X) throw()
529*04e0dc4aSTimo Kreuzer     {
530*04e0dc4aSTimo Kreuzer         return ctanl(_X);
531*04e0dc4aSTimo Kreuzer     }
532*04e0dc4aSTimo Kreuzer 
tanh(_In_ _Lcomplex _X)533*04e0dc4aSTimo Kreuzer     inline _Lcomplex __CRTDECL tanh(_In_ _Lcomplex _X) throw()
534*04e0dc4aSTimo Kreuzer     {
535*04e0dc4aSTimo Kreuzer         return ctanhl(_X);
536*04e0dc4aSTimo Kreuzer     }
537*04e0dc4aSTimo Kreuzer 
abs(_In_ _Lcomplex _X)538*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL abs(_In_ _Lcomplex _X) throw()
539*04e0dc4aSTimo Kreuzer     {
540*04e0dc4aSTimo Kreuzer         return cabsl(_X);
541*04e0dc4aSTimo Kreuzer     }
542*04e0dc4aSTimo Kreuzer 
arg(_In_ _Lcomplex _X)543*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL arg(_In_ _Lcomplex _X) throw()
544*04e0dc4aSTimo Kreuzer     {
545*04e0dc4aSTimo Kreuzer         return cargl(_X);
546*04e0dc4aSTimo Kreuzer     }
547*04e0dc4aSTimo Kreuzer 
carg(_In_ _Lcomplex _X)548*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL carg(_In_ _Lcomplex _X) throw()
549*04e0dc4aSTimo Kreuzer     {
550*04e0dc4aSTimo Kreuzer         return cargl(_X);
551*04e0dc4aSTimo Kreuzer     }
552*04e0dc4aSTimo Kreuzer 
cimag(_In_ _Lcomplex _X)553*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL cimag(_In_ _Lcomplex _X) throw()
554*04e0dc4aSTimo Kreuzer     {
555*04e0dc4aSTimo Kreuzer         return cimagl(_X);
556*04e0dc4aSTimo Kreuzer     }
557*04e0dc4aSTimo Kreuzer 
creal(_In_ _Lcomplex _X)558*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL creal(_In_ _Lcomplex _X) throw()
559*04e0dc4aSTimo Kreuzer     {
560*04e0dc4aSTimo Kreuzer         return creall(_X);
561*04e0dc4aSTimo Kreuzer     }
562*04e0dc4aSTimo Kreuzer 
imag(_In_ _Lcomplex _X)563*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL imag(_In_ _Lcomplex _X) throw()
564*04e0dc4aSTimo Kreuzer     {
565*04e0dc4aSTimo Kreuzer         return cimagl(_X);
566*04e0dc4aSTimo Kreuzer     }
567*04e0dc4aSTimo Kreuzer 
real(_In_ _Lcomplex _X)568*04e0dc4aSTimo Kreuzer     inline long double __CRTDECL real(_In_ _Lcomplex _X) throw()
569*04e0dc4aSTimo Kreuzer     {
570*04e0dc4aSTimo Kreuzer         return creall(_X);
571*04e0dc4aSTimo Kreuzer     }
572*04e0dc4aSTimo Kreuzer 
573*04e0dc4aSTimo Kreuzer } // extern "C++"
574*04e0dc4aSTimo Kreuzer #endif // __cplusplus
575*04e0dc4aSTimo Kreuzer 
576*04e0dc4aSTimo Kreuzer _CRT_END_C_HEADER
577*04e0dc4aSTimo Kreuzer _UCRT_RESTORE_CLANG_WARNINGS
578*04e0dc4aSTimo Kreuzer #pragma warning(pop) // _UCRT_DISABLED_WARNINGS
579*04e0dc4aSTimo Kreuzer #endif // (_CRT_HAS_CXX17 == 1) && !defined(_CRT_USE_C_COMPLEX_H)
580*04e0dc4aSTimo Kreuzer #endif // _COMPLEX
581