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 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 , 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour