Partager via


Mathématiques de type générique

Pour iso C Standard 11 (C11) et versions ultérieures, l’en-tête <tgmath.h> , en plus d’inclure <math.h> et <complex.h>, fournit des macros qui appellent une fonction mathématique correspondante basée sur les types des paramètres.

Les fonctions mathématiques de la bibliothèque runtime C sont des variantes réelles et complexes. Chaque variante est disponible en trois saveurs, en fonction du type de l’argument : float, doubleet long double. Étant donné que C ne prend pas en charge la surcharge comme C++, chaque variante a un nom différent. Par exemple, pour obtenir la valeur absolue d’une valeur à virgule flottante réelle, vous appelez fabsfl’un fabsou l’autre, ou fabsl selon que vous passez un float, doubleou long double une valeur, respectivement. Pour obtenir la valeur absolue complexe, vous appelez l’une des cabsfvaleurs cabsabsolues, ou cabsl selon que vous transmettez respectivement une valeur complexe et long double une floatdoublevaleur complexe. Si les arguments ne correspondent à aucun des types mentionnés ci-dessus, la fonction est choisie comme si les arguments étaient doubles.

<tgmath.h> contient des macros qui simplifient la sélection de la fonction mathématique appropriée à appeler. Les macros examinent le type qu’elles sont passées, puis appellent la fonction appropriée. Par exemple, la sqrt macro est liée sqrt(9.9f) à sqrtf(), mais elle est sqrt(9.9) liée à sqrt(). Si au moins un argument macro pour un paramètre générique est complexe, la macro est liée à une fonction complexe ; sinon, elle appelle une fonction réelle.

Les macros génériques de type dans <tgmath.h> vous permettent d’écrire du code plus portable, car vous n’avez pas besoin de gérer la conversion ou de sélectionner différents noms de fonction en fonction du type d’argument.

Ces macros se trouvent dans leur propre en-tête afin que les programmes écrits à l’aide de l’en-tête <math.h> ne s’interrompent pas. Se double x = sin(42); comporte donc comme il l’a toujours quand vous incluez <math.h>. Même si la plupart des programmes C existants sont censés ne pas être affectés lorsque l’en-tête <tgmath.h> est inclus au lieu de <math.h> ou <complex.h>.

Le tableau suivant répertorie les macros disponibles <tgmath.h> et leur extension. modf n’est pas inclus dans ce tableau, car il n’a pas de macro générique de type correspondante, car il n’est pas clair comment le rendre sûr sans compliquer la résolution de type.

Macro Réel
float
Réel
double
Réel
long double
Complexe
float
Complexe
double
Complexe
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

Spécifications

Compilez avec /std:c11.

SDK Windows 10.0.20348.0 (version 2104) ou ultérieure. Pour télécharger le Kit de développement logiciel (SDK) le plus récent, consultez SDK Windows. Pour obtenir des instructions sur l’installation et l’utilisation du Kit de développement logiciel (SDK) pour le développement en C11 et C17, consultez Installer la prise en charge de C11 et C17 dans Visual Studio.

Voir aussi

Informations de référence sur la bibliothèque d’exécution C