Matemáticas de tipo genéricoType-generic math

Para ISO C estándar 11 (C11) y versiones posteriores, el <tgmath.h> encabezado, además de incluir <math.h> y <complex.h> , proporciona macros que invocan una función matemática correspondiente en función de los tipos de los parámetros.For ISO C Standard 11 (C11) and later, the <tgmath.h> header, in addition to including <math.h> and <complex.h>, provides macros that invoke a corresponding math function based on the types of the parameters.

Las funciones matemáticas de la biblioteca en tiempo de ejecución de C están en variantes reales y complejas.C runtime library math functions come in real and complex variants. Cada variante se incluye en tres tipos, dependiendo del tipo del argumento: float , double y long double .Each variant comes in three flavors, depending on the type of the argument: float, double, and long double. Dado que C no admite la sobrecarga, como hace C++, cada variante tiene un nombre diferente.Because C doesn't support overloading like C++ does, each variant has a different name. Por ejemplo, para obtener el valor absoluto de un valor de punto flotante real, debería llamar a fabsf , fabs o fabsl en función de si está pasando un float double valor, o long double , respectivamente.For example, to get the absolute value of a real floating-point value, you'd call either fabsf, fabs, or fabsl depending on whether you're passing a float, double, or long double value, respectively. Para obtener el valor absoluto complejo, se llamaría a cabsf , cabs o cabsl en función de si se está pasando un float double long double valor complejo, y, respectivamente.To get the complex absolute value, you'd call one of cabsf, cabs, or cabsl depending on whether you're passing a float, double, and long doublecomplex value, respectively. Si los argumentos no coinciden con ninguno de los tipos mencionados anteriormente, la función se elige como si los argumentos fueran dobles.If the arguments do not match any of the above mentioned types, the function is chosen as though the arguments were doubles.

<tgmath.h> contiene macros que simplifican la selección de la función matemática derecha a la que se va a llamar.<tgmath.h> contains macros that simplify the selection of the right math function to call. Las macros examinan el tipo que se pasan y, a continuación, llaman a la función Right.The macros examine the type they're passed and then call the right function. Por ejemplo, la sqrt macro se enlaza sqrt(9.9f) a sqrtf() , pero se enlaza sqrt(9.9) a sqrt() .For example, the sqrt macro binds sqrt(9.9f) to sqrtf(), but it binds sqrt(9.9) to sqrt(). Si al menos un argumento de macro para un parámetro genérico es complejo, la macro se enlaza a una función compleja; de lo contrario, invoca una función real.If at least one macro argument for a generic parameter is complex, then the macro binds to a complex function; otherwise, it invokes a real function.

Las macros de tipo genérico de <tgmath.h> permiten escribir código más portable, ya que no es necesario administrar la conversión ni seleccionar nombres de función diferentes en función del tipo de argumento.The type-generic macros in <tgmath.h> allow you to write more portable code because you don't need to manage casting or selecting different function names depending on the type of argument.

Estas macros están en su propio encabezado para que los programas escritos con el <math.h> encabezado no se interrumpan.These macros are in their own header so that programs written using the <math.h> header won't break. Por lo tanto, se double x = sin(42); comporta como siempre cuando se incluye <math.h> .So double x = sin(42); behaves as it always has when you include <math.h>. Incluso así, se espera que la mayoría de los programas de C existentes no se vean afectados cuando <tgmath.h> se incluye el encabezado en lugar de <math.h> o <complex.h> .Even so, most existing C programs are expected to be unaffected when the <tgmath.h> header is included instead of <math.h> or <complex.h>.

En la tabla siguiente se enumeran las macros que están disponibles en <tgmath.h> y de qué se expanden.The following table lists the macros that are available in <tgmath.h> and what they expand to. modf no se incluye en esta tabla porque no tiene una macro Type-Generic correspondiente porque no está claro cómo hacerlo segura sin complicar la resolución de tipos.modf isn't included in this table because it doesn't have a corresponding type-generic macro because it isn't clear how to make it safe without complicating type resolution.

MacroMacro RealReal
float
RealReal
double
RealReal
long double
ComplexComplex
float
ComplexComplex
double
ComplexComplex
long double
acos acosf acos acosl cacosf cacos cacosl
acosh acoshf acosh acoshl cacoshf cacosh cacoshl
asin asinf asin asinl casinf casin casinl
asinh asinhf asinh asinhl casinhf casinh casinhl
atan atanf atan atanl catanf catan catanl
atanh atanhf atanh atanhl catanhf catanh catanhl
cos cosf cos cosl ccosf ccos ccosl
cosh coshf cosh coshl ccoshf ccosh ccoshl
exp expf exp expl cexpf cexp cexpl
fabs fabsf fabs fabsl cabsf cabs cabsl
log logf log logl clogf clog clogl
pow powf pow powl cpowf cpow cpowl
sin sinf sin sinl csinf csin csinl
sinh sinhf sinh sinhl csinhf csinh csinhl
sqrt sqrtf sqrt sqrtl csqrtf csqrt csqrtl
tan tanf tan tanl ctanf ctan ctanl
tanh tanhf tanh tanhl ctanhf ctanh ctanhl
atan2 atan2f atan2 atan2l - - -
cbrt cbrtf cbrt cbrtl - - -
ceil ceilf ceil ceill - - -
copysign copysignf copysign copysignl - - -
erf erff erf erfl - - -
erfc erfcf erfc erfcl - - -
exp2 exp2f exp2 exp2l - - -
expm1 expm1f expm1 expm1l - - -
fdim fdimf fdim fdiml - - -
floor floorf floor floorl - - -
fma fmaf fma fmal - - -
fmax fmaxf fmax fmaxl - - -
fmin fminf fmin fminl - - -
fmod fmodf fmod fmodl - - -
frexp frexpf frexp frexpl - - -
hypot hypotf hypot hypotl - - -
ilogb ilogbf ilogb ilogbl - - -
ldexp ldexpf ldexp ldexpl - - -
lgamma lgammaf lgamma lgammal - - -
llrint llrintf llrint llrintl - - -
llround llroundf llround llroundl - - -
log10 log10f log10 log10l - - -
log1p log1pf log1p log1pl - - -
log2 log2f log2 log2l - - -
logb logbf logb logbl - - -
lrint lrintf lrint lrintl - - -
lround lroundf lround lroundl - - -
nearbyint nearbyintf nearbyint nearbyintl - - -
nextafter nextafterf nextafter nextafterl - - -
nexttoward nexttowardf nexttoward nexttowardl - - -
remainder remainderf remainder remainderl - - -
remquo remquof remquo remquol - - -
rint rintf rint rintl - - -
round roundf round roundl - - -
scalbln scalblnf scalbln scalblnl - - -
scalbn scalbnf scalbn scalbnl - - -
tgamma tgammaf tgamma tgammal - - -
trunc truncf trunc truncl - - -
carg - - - cargf carg cargl
conj - - - conjf conj conjl
creal - - - crealf creal creall
cimag - - - cimagf cimag cimagl
cproj - - - cprojf cproj cprojl

RequisitosRequirements

STD: se requiere c++ 11 o posterior.std:c++11 or later is required.

Windows SDK la versión 10.0.20201.0 o posterior.Windows SDK version 10.0.20201.0 or later. Esta es actualmente una compilación Insider que puede descargar de descargas de Windows Insider Preview.This is currently an Insider build which you can download from Windows Insider Preview Downloads. Consulte C11 y C17: Introducción para obtener instrucciones sobre la instalación y el uso de este SDK.See C11 and C17: Getting Started for instructions on installing and using this SDK.

Vea tambiénSee also

Referencia de la biblioteca de C Run-TimeC Run-Time library reference