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