Partager via


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 Utiliser
abs, , labsllabs, ,_abs64 Calcule la valeur absolue d’un type integer
acos, , acosfacosl Calcule l’arc cosinus
acosh, , acoshfacoshl Calcule l’arc cosinus hyperbolique
asin, , asinfasinl Calcule l’arc sinus
asinh, , asinhfasinhl Calcule l’arc sinus hyperbolique
atan, , atanf, atan2atanl, , atan2fatan2l Calcule l’arc tangente
atanh, , atanhfatanhl 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, , cbrtfcbrtl Calcule la racine cubique
ceil, , ceilfceill 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, _copysigncopysignl, , _copysignf_copysignl Retourne une valeur qui a la grandeur d’un argument et le signe d’un autre
cos, , cosfcosl Calcule le sinus
cosh, , coshfcoshl Calcule le sinus hyperbolique
div, , ldivlldiv 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, , erfferfl Calcule la fonction d’erreur
erfc, , erfcferfcl Calcule la fonction d’erreur complémentaire
exp, , expfexpl Calcule la valeur exponentielle ex
exp2, , exp2fexp2l Calcule la valeur exponentielle 2x
expm1, , expm1fexpm1l Calcule ex-1
fabs, , fabsffabsl 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, , fdimffdiml 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, , floorffloorl Calcule la valeur plancher
fma, , fmaffmal Calcule une multiplication-addition fusionnées
fmax, , fmaxffmaxl Calcule la valeur maximale des arguments
fmin, , fminffminl Calcule le minimum des arguments
fmod, , fmodffmodl 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, , frexpffrexpl 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, _hypothypotl, , _hypotf_hypotl Calcule l’hypoténuse
ilogb, , ilogbfilogbl 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, islessequalisless, , islessgreaterisunordered 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, , ldexpfldexpl Calcule x*2n
lgamma, , lgammaflgammal Calcule le logarithme népérien de la valeur absolue de la fonction gamma
llrint, , llrintfllrintl Arrondit une valeur à virgule flottante à la valeur la plus long long proche
llround, , llroundfllroundl Arrondit une valeur à virgule flottante à la valeur la plus long long proche
log, , logf, log10logl, , log10flog10l Calcule le logarithme népérien ou de base 10
log1p, , log1pflog1pl Calcule le logarithme népérien de 1+x
log2, , log2flog2l Calcule le logarithme de base 2
logb, , logbflogbl, , _logb_logbf Retourne l’exposant d’une valeur à virgule flottante
lrint, , lrintflrintl 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, , lroundflroundl 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, , modffmodfl Fractionne une valeur à virgule flottante en une partie fractionnaire et une partie entière
nan, , nanfnanl Retourne une valeur NaN silencieuse
nearbyint, , nearbyintfnearbyintl Retourne la valeur arrondie
nextafter, , nextafterfnextafterl, , _nextafter_nextafterf Retourne la valeur à virgule flottante représentable suivante
nexttoward, , nexttowardfnexttowardl Retourne la valeur à virgule flottante représentable suivante
pow, , powfpowl Retourne la valeur de xy
remainder, , remainderfremainderl Calcule le reste du quotient de deux valeurs à virgule flottante
remquo, , remquofremquol Calcule le reste de deux valeurs entières
rint, , rintfrintl Arrondit une valeur à virgule flottante
_rotl, , _rotl64_rotr, ,_rotr64 Fait pivoter les bits de types integer
round, , roundfroundl Arrondit une valeur à virgule flottante
_scalb, _scalbf Met à l’échelle un argument par une puissance de 2
scalbn, , scalbnf, scalblnscalbnl, , scalblnfscalblnl 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, , sinfsinl Calcule le sinus
sinh, , sinhfsinhl Calcule le sinus hyperbolique
sqrt, , sqrtfsqrtl 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, , tanftanl Calcule la tangente
tanh, , tanhftanhl Calcule la tangente hyperbolique
tgamma, , tgammaftgammal Calcule la fonction gamma
trunc, , truncftruncl 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