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
, double
et 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 fabsf
l’un fabs
ou l’autre, ou fabsl
selon que vous passez un float
, double
ou long double
une valeur, respectivement. Pour obtenir la valeur absolue complexe, vous appelez l’une des cabsf
valeurs cabs
absolues, ou cabsl
selon que vous transmettez respectivement une valeur complexe et long double
une float
double
valeur 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.
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.