Prise en charge des fonctions mathématiques et à virgule flottante

La bibliothèque UCRT (Universal C Runtime library) fournit de nombreuses fonctions de bibliothèque mathématique intégrale et à virgule flottante, y compris toutes les fonctions requises par ISO C99. Les fonctions à virgule flottante sont implémentées pour équilibrer le niveau de performance avec exactitude. Étant donné que la production du résultat correctement arrondi peut atteindre un coût prohibitif, ces fonctions sont conçues pour produire efficacement une approximation précise du résultat correctement arrondi. Dans la plupart des cas, le résultat produit se trouve dans l’ULP +/-1 (unité de moindre précision) du résultat arrondi correctement, bien qu’il puisse y avoir des cas où il y a une plus grande inexactitude.

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. Pour plus d’informations, consultez les mathématiques génériques de type.

De nombreuses fonctions de bibliothèque mathématique à virgule flottante ont des implémentations différentes pour des architectures de processeur différentes. Par exemple, l’implémentation de la bibliothèque CRT x86 32 bits peut être différente de celle de la bibliothèque CRT x64 64 bits. De plus, certaines fonctions peuvent avoir plusieurs implémentations pour une architecture de processeur donnée. L’implémentation la plus efficace est sélectionnée de façon dynamique au moment de l’exécution selon les jeux d’instructions pris en charge par le processeur. Par exemple, dans la bibliothèque CRT x86 32 bits, certaines fonctions ont à la fois une implémentation x87 et une implémentation SSE2. Lors d’une exécution sur un processeur qui prend en charge SSE2, l’implémentation SSE2 plus rapide est utilisée. Lors de l’exécution sur un processeur qui ne prend pas en charge SSE2, l’implémentation x87 plus lente est utilisée. Étant donné que les différentes implémentations des fonctions de bibliothèque mathématique peuvent utiliser des instructions de processeur différentes et des algorithmes différents pour produire leurs résultats, les fonctions peuvent produire des résultats différents selon les processeurs. Dans la plupart des cas, les résultats se trouvent dans l’ULP +/-1 du résultat correctement arrondi, mais les résultats réels peuvent varier entre les PROCESSEURs.

Les versions 16 bits précédentes de Microsoft C/C++ et Microsoft Visual C++ prenaient en charge le type long double en tant que type de données à virgule flottante de précision 80 bits. Dans les versions plus récentes de Visual C++, le type de données long double est un type de données à virgule flottante de précision 64 bits identique au type double. Le compilateur traite long double et double comme des types distincts, mais les fonctions long double sont identiques à leurs équivalents double. La bibliothèque CRT fournit des versions long double des fonctions mathématiques à des fins de compatibilité du code source ISO C99, mais notez que la représentation binaire peut différer de celle d’autres compilateurs.

Routines à virgule flottante et mathématiques prises en charge

Routine Utilisation
abs, labs, llabs, _abs64 Calcule la valeur absolue d’un type integer
acos, acosf, acosl Calcule l’arc cosinus
acosh, acoshf, acoshl Calcule l’arc cosinus hyperbolique
asin, asinf, asinl Calcule l’arc sinus
asinh, asinhf, asinhl Calcule l’arc sinus hyperbolique
atan, atanf, atanl, atan2, atan2f, atan2l Calcule l’arc tangente
atanh, atanhf, atanhl Calcule l’arc tangente hyperbolique
_atodbl, _atodbl_l Convertit une chaîne spécifique aux paramètres régionaux en une double
atof, _atof_l Convertit une chaîne en une double
_atoflt, _atoflt_l, _atoldbl, _atoldbl_l Convertit une chaîne spécifique aux paramètres régionaux en une float ou long double
cbrt, cbrtf, cbrtl Calcule la racine cubique
ceil, ceilf, ceill Calcule la valeur plafond
_chgsign, _chgsignf, _chgsignl Calcule l’inverse additif
_clear87, _clearfp Obtient et efface le registre d’état à virgule flottante
_control87, _controlfp, __control87_2 Obtient et définit le mot de contrôle à virgule flottante
_controlfp_s Version sécurisée de _controlfp
copysign, copysignf, copysignl, _copysign, _copysignf, _copysignl Retourne une valeur qui a la grandeur d’un argument et le signe d’un autre
cos, cosf, cosl Calcule le sinus
cosh, coshf, coshl Calcule le sinus hyperbolique
div, ldiv, lldiv Calcule le quotient et le reste de deux valeurs entières
_ecvt, ecvt Convertit un double en chaîne
_ecvt_s Version sécurisée de _ecvt
erf, erff, erfl Calcule la fonction d’erreur
erfc, erfcf, erfcl Calcule la fonction d’erreur complémentaire
exp, expf, expl Calcule la valeur exponentielle ex
exp2, exp2f, exp2l Calcule la valeur exponentielle 2x
expm1, expm1f, expm1l Calcule ex-1
fabs, fabsf, fabsl Calcule la valeur absolue d’un type à virgule flottante
_fcvt, fcvt Convertir un nombre à virgule flottante en chaîne
_fcvt_s Version sécurisée de _fcvt
fdim, fdimf, fdiml Détermine la différence positive entre les deux valeurs
feclearexcept Efface les exceptions de virgule flottante spécifiées
fegetenv Stocke l’environnement à virgule flottante actuel
fegetexceptflag Obtient l’état des exceptions de virgule flottante spécifiées
fegetround Obtient le mode d’arrondi de virgule flottante
feholdexcept Définit le mode d’exception de virgule flottante non stop
feraiseexcept Lève les exceptions de virgule flottante spécifiées
fesetenv Définit l’environnement à virgule flottante actuel
fesetexceptflag Définit les indicateurs d’état de virgule flottante spécifiés
fesetround Définit le mode d’arrondi de virgule flottante spécifié
fetestexcept Détermine les indicateurs d’état d’exception de virgule flottante à définir
feupdateenv Restaure un environnement à virgule flottante, puis lève les exceptions précédentes
floor, floorf, floorl Calcule la valeur plancher
fma, fmaf, fmal Calcule une multiplication-addition fusionnées
fmax, fmaxf, fmaxl Calcule la valeur maximale des arguments
fmin, fminf, fminl Calcule le minimum des arguments
fmod, fmodf, fmodl Calcule le reste à virgule flottante
_fpclass, _fpclassf Retourne la classification d’une valeur à virgule flottante
fpclassify Retourne la classification d’une valeur à virgule flottante
_fpieee_flt Définit un gestionnaire pour les exceptions de virgule flottante
_fpreset Redéfinit l’environnement à virgule flottante
frexp, frexpf, frexpl Obtient la mantisse et l’exposant d’un nombre à virgule flottante
_gcvt, gcvt Convertir un nombre à virgule flottante en chaîne
_gcvt_s Version sécurisée de _gcvt
_get_FMA3_enable, _set_FMA3_enable Obtient ou définit un indicateur pour l’utilisation des instructions FMA3 sur x64
hypot, hypotf, hypotl, _hypot, _hypotf, _hypotl Calcule l’hypoténuse
ilogb, ilogbf, ilogbl Calcule l’exposant de base 2 entier
imaxabs Calcule la valeur absolue d’un type integer
imaxdiv Calcule le quotient et le reste de deux valeurs entières
isfinite, _finite, _finitef Détermine si une valeur est finie
isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered Compare l’ordre de deux valeurs à virgule flottante
isinf Détermine si une valeur à virgule flottante est infinie
isnan, _isnan, _isnanf Teste une valeur à virgule flottante pour une valeur NaN
isnormal Teste si une valeur à virgule flottante est à la fois finie et non subnormale
_j0, _j1, _jn Calcule la fonction de Bessel
ldexp, ldexpf, ldexpl Calcule x*2n
lgamma, lgammaf, lgammal Calcule le logarithme népérien de la valeur absolue de la fonction gamma
llrint, llrintf, llrintl Arrondit une valeur à virgule flottante à la valeur la plus long long proche
llround, llroundf, llroundl Arrondit une valeur à virgule flottante à la valeur la plus long long proche
log, logf, logl, log10, log10f, log10l Calcule le logarithme népérien ou de base 10
log1p, log1pf, log1pl Calcule le logarithme népérien de 1+x
log2, log2f, log2l Calcule le logarithme de base 2
logb, logbf, logbl, _logb, _logbf Retourne l’exposant d’une valeur à virgule flottante
lrint, lrintf, lrintl Arrondit une valeur à virgule flottante à la valeur la plus long proche
_lrotl, _lrotr Fait pivoter une valeur entière vers la gauche ou vers la droite
lround, lroundf, lroundl Arrondit une valeur à virgule flottante à la valeur la plus long proche
_matherr Gestionnaire d’erreurs mathématiques par défaut
__max Macro qui retourne la plus grande de deux valeurs
__min Macro qui retourne la plus petite de deux valeurs
modf, modff, modfl Fractionne une valeur à virgule flottante en une partie fractionnaire et une partie entière
nan, nanf, nanl Retourne une valeur NaN silencieuse
nearbyint, nearbyintf, nearbyintl Retourne la valeur arrondie
nextafter, nextafterf, nextafterl, _nextafter, _nextafterf Retourne la valeur à virgule flottante représentable suivante
nexttoward, nexttowardf, nexttowardl Retourne la valeur à virgule flottante représentable suivante
pow, powf, powl Retourne la valeur de xy
remainder, remainderf, remainderl Calcule le reste du quotient de deux valeurs à virgule flottante
remquo, remquof, remquol Calcule le reste de deux valeurs entières
rint, rintf, rintl Arrondit une valeur à virgule flottante
_rotl, _rotl64, _rotr, _rotr64 Fait pivoter les bits de types integer
round, roundf, roundl Arrondit une valeur à virgule flottante
_scalb, _scalbf Met à l’échelle un argument par une puissance de 2
scalbn, scalbnf, scalbnl, scalbln, scalblnf, scalblnl Multiplie un nombre à virgule flottante par une puissance intégrale de FLT_RADIX
_set_controlfp Définit le mot de contrôle à virgule flottante
_set_SSE2_enable Active ou désactive les instructions SSE2
signbit Teste le bit de signe d’une valeur à virgule flottante
sin, sinf, sinl Calcule le sinus
sinh, sinhf, sinhl Calcule le sinus hyperbolique
sqrt, sqrtf, sqrtl Calcule la racine carrée
_status87, _statusfp, _statusfp2 Obtient le mot d’état de virgule flottante
strtof, _strtof_l Convertit une chaîne en une float
strtold, _strtold_l Convertit une chaîne en une long double
tan, tanf, tanl Calcule la tangente
tanh, tanhf, tanhl Calcule la tangente hyperbolique
tgamma, tgammaf, tgammal Calcule la fonction gamma
trunc, truncf, truncl Tronque la partie fractionnaire
_wtof, _wtof_l Convertit une chaîne large en une double
_y0, _y1, _yn Calcule la fonction de Bessel

Voir aussi

Routines du runtime C universel par catégorie
Primitives à virgule flottante