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 , , 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 , atan2 atanl , , 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 , _copysign copysignl , , _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 , _hypot hypotl , , _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 , islessequal isless , , 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 , log10 logl , , 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 x y |
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 , scalbln scalbnl , , 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