math.h est un groupe de fonctions de la bibliothèque standard du C qui permet d'utiliser un ensemble de fonctions mathématiques de base[1],[2], utilisant des nombres à virgule flottante. Les différents standards du C les implémentent différemment, mais en restant toujours rétrocompatibles. La plupart de ces fonctions sont également disponibles dans la bibliothèque standard de C++, bien que dans un autre en-tête (les en-têtes du C sont inclus, mais uniquement pour assurer la compatibilité).
Aperçu des fonctions
La plupart des fonctions sont contenues dans l'en-tête math.h (ou dans l'en-tête cmath en C++). Les fonctions qui opèrent sur les entiers, telles que abs, labs, div, ou ldiv sont par contre spécifiées dans stdlib.h (cstdlib en C++).
Toutes les fonctions qui font intervenir des angles utilisent le radian comme unité[1].
Toutes les fonctions ne sont pas présentes dans la version C89 du standard du C. Pour celles qui le sont, les fonctions n'acceptent que le type double pour les opérations sur des nombres à virgule flottante. Dans la norme C99, cette limitation a été levée en introduisant une nouvelle série de fonctions fonctionnant avec des paramètres de type float ou long double. Ces fonctions sont identifiables respectivement par le suffixe f ou l[3].
Fonction | Description | |
---|---|---|
abs labs llabs
|
calcule la valeur absolue d'un nombre entier | |
fabs
|
calcule la valeur absolue d'un nombre de type float | |
div ldiv lldiv
|
calcule le quotient et le reste de la division euclidienne | |
fmod
|
reste de la division de nombres à virgule flottante | |
remainder
|
reste signé de l'opération de division | |
remquo
|
reste signé ainsi que les trois derniers bits de l'opération de division | |
fma
|
Multiplication puis addition (Multiply-accumulate) | |
fmax
|
maximum des deux valeurs à virgule flottante | |
fmin
|
minimum des deux valeurs à virgule flottante | |
fdim
|
différence positive de deux valeurs à virgule flottante | |
nan nanf nanl
|
Retourne un not-a-number (NaN) | |
Fonctions exponentielles | exp
|
retourne e élevé à la puissance demandée |
exp2
|
retourne 2 élevé à la puissance demandée | |
expm1
|
retourne e élevé à la puissance demandée moins 1 | |
log
|
calcule le logarithme naturel (en base e) | |
log2
|
calcule le logarithme binaire (en base 2) | |
log10
|
calcule le logarithme décimal (en base 10) | |
log1p
|
calcule le logarithme naturel (en base e) de 1 plus le nombre donné | |
ilogb
|
extrait l'exposant d'un nombre | |
logb
|
extrait l'exposant d'un nombre | |
Fonctions puissance | sqrt
|
calcule la racine carrée |
cbrt
|
calcule la racine cubique | |
hypot
|
calcule la racine carrée de la somme des carrés des deux nombres donnés | |
pow
|
élève un nombre à la puissance donnée | |
Fonctions trigonométriques | sin
|
calcule le sinus |
cos
|
calcule le cosinus | |
tan
|
calcule la tangente | |
asin
|
calcule l'arc sinus | |
acos
|
calcule l'arc cosinus | |
atan
|
calcule l'arc tangente | |
atan2
|
calcule l'arc tangente, en utilisant le signe pour déterminer le quadrant | |
Fonctions hyperboliques | sinh
|
calcule le sinus hyperbolique |
cosh
|
calcule le cosinus hyperbolique | |
tanh
|
calcule la tangente hyperbolique | |
asinh
|
calcule l'arc sinus hyperbolique | |
acosh
|
calcule l'arc cosinus hyperbolique | |
atanh
|
calcule l'arc tangente hyperbolique | |
Fonction d'erreur et fonction gamma | erf
|
calcule la fonction d'erreur |
erfc
|
calcule la fonction d'erreur complémentaire | |
lgamma
|
calcule le logarithme naturel de la valeur absolue de la fonction gamma | |
tgamma
|
calcule la fonction gamma | |
Opérations d'arrondi | ceil
|
renvoie le nombre entier supérieur le plus proche |
floor
|
renvoie le nombre entier inférieur le plus proche | |
trunc
|
retourne l'entier le plus proche dont la valeur absolue est inférieure | |
round lround llround
|
retourne l'entier le plus proche, suivant les règles d'arrondi | |
nearbyint
|
retourne l'entier le plus proche en utilisant la méthode d'arrondi courante | |
rint lrint llrint
|
retourne l'entier le plus proche en utilisant la méthode d'arrondi courante avec exception si le résultat diffère | |
Fonctions de manipulation de nombres à virgule flottante | frexp
|
décompose le paramètre en un nombre et une puissance de 2 |
ldexp
|
multiplie un nombre par un nombre élevé à une puissance de 2 | |
modf
|
décompose un nombre en un entier et sa partie fractionnelle. | |
scalbn scalbln
|
multiplie un nombre par FLT_RADIX élevé à une puissance donnée | |
nextafter nexttoward
|
retourne la prochaine valeur représentable en virgule flottante | |
copysign
|
copie le signe d'un nombre à virgule flottante | |
Classification | fpclassify
|
catégorise une valeur en virgule flottante |
isfinite
|
vérifie si le nombre donné a une valeur finie | |
isinf
|
vérifie si le nombre donné a une valeur infinie | |
isnan
|
vérifie si le nombre donné est NaN | |
isnormal
|
vérifie si le nombre donné est normal | |
signbit
|
vérifie si le nombre donné est négatif |
Environnement en virgule flottante
C99 ajoute plusieurs fonctions et types pour contrôler plus finement l’environnement en virgule flottante[4]. Ces fonctions peuvent être utilisées pour contrôler un certain nombre de paramètres qui affectent le calcul avec des nombres à virgule flottante, par exemple le mode d'arrondi, quand les nombres doivent être remis à zéro, etc. Ces fonctions sont définies dans l'en-tête fenv.h (cfenv en C++).
Fonction | Description |
---|---|
feclearexcept
|
retire les exceptions (C99) |
fegetenv
|
enregistre l'environnement actuel (C99) |
fegetexceptflag
|
enregistre les flags de statut (C99) |
fegetround
|
récupère la direction actuelle de l'arrondi (C99) |
feholdexcept
|
enregistre l'environnement actuel et nettoie les exceptions (C99) |
feraiseexcept
|
soulève une exception (C99) |
fesetenv
|
met en place un environnement (C99) |
fesetexceptflag
|
met en place un flag de statut (C99) |
fesetround
|
choisi la direction de l'arrondi (C99) |
fetestexcept
|
test si certaines exceptions ont été soulevées (C99) |
feupdateenv
|
restaure un environnement en conservant les exceptions soulevées (C99) |
Nombres complexes
C99 ajoute le nouveau mot-clé _Complex (et la macro complex pour plus de commodité) qui permet de gérer des nombres complexes. Ceux-ci se présentent sous la forme de deux nombres à virgule flottante.
C++ ne propose pas de rétro-compatibilité concernant les nombres complexes, mais fournit la classe std::complex.
Toutes les opérations sur des nombres complexes sont définies dans l'en-tête complex.h. Comme pour les fonctions sur les entiers, les suffixes f et l sont les variantes de la fonction utilisant respectivement les types float complex et long double complex.
Fonction | Description | |
---|---|---|
Opérations de base | cabs
|
calcule la valeur absolue (C99) |
carg
|
calcule l'argument(C99) | |
cimag
|
renvoie la partie imaginaire d'un nombre complexe (C99) | |
creal
|
renvoie la partie réelle d'un nombre complexe (C99) | |
conj
|
renvoie le conjugué d'un nombre complexe (C99) | |
cproj
|
calcule la projection du nombre complexe sur la sphère de Riemann (C99) | |
Opérations exponentielles | cexp
|
calcule l'exponentiel d'un nombre complexe (C99) |
clog
|
calcule le logarithme d'un nombre complexe (C99) | |
csqrt
|
calcule la racine carrée d'un nombre complexe (C99) | |
cpow
|
calcule la puissance d'un nombre complexe (C99) | |
Opérations trigonométriques | csin
|
calcule le sinus d'un nombre complexe (C99) |
ccos
|
calcule le cosinus d'un nombre complexe (C99) | |
ctan
|
calcule la tangente d'un nombre complexe (C99) | |
casin
|
calcule l'arc sinus d'un nombre complexe (C99) | |
cacos
|
calcule l'arc cosinus d'un nombre complexe (C99) | |
catan
|
calcule l'arc tangente d'un nombre complexe (C99) | |
Opérations hyperboliques | csinh
|
calcule le sinus hyperbolique d'un nombre complexe (C99) |
ccosh
|
calcule le cosinus hyperbolique d'un nombre complexe (C99) | |
ctanh
|
calcule la tangente hyperbolique d'un nombre complexe (C99) | |
casinh
|
calcule l'arc sinus hyperbolique d'un nombre complexe (C99) | |
cacosh
|
calcule l'arc cosinus hyperbolique d'un nombre complexe (C99) | |
catanh
|
calcule l'arc tangente hyperbolique d'un nombre complexe (C99) |
Génération de nombres aléatoires
L'en-tête stdlib.h (cstdlib en C++) définit plusieurs fonctions qui peuvent être utilisées pour de la génération statique de nombres aléatoires[5].
Fonction | Description |
---|---|
rand
|
génère un nombre pseudo-aléatoire |
srand
|
initialise un générateur de nombres pseudo-aléatoires |
libm
Sous Linux et FreeBSD, les fonctions mathématiques (telles que déclarées dans math.h) sont regroupées séparément dans la bibliothèque mathématique libm. Donc si l'une de ces fonctions est utilisée, la directive -lm doit être ajoutée à l'éditeur de liens.
Notes et références
- (en) ISO/IEC 9899 : 1999 specification (lire en ligne), p. 212, § 7.12.
- (en) Stephen Prata, C primer plus : Includes Index, Sams Publishing, , 959 p. (ISBN 0-672-32696-5), Appendix B, Section V: The Standard ANSI C Library with C99 Additions.
- Stephen Prata, C primer plus : Includes Index, Sams Publishing, , 959 p. (ISBN 0-672-32696-5), Appendix B, Section VIII: C99 Numeric Computational Enhancements.
- (en) Stephen Prata, C primer plus : Includes Index, Sams Publishing, , 959 p. (ISBN 0-672-32696-5), Appendix B, Section VIII: C99 Numeric Computational Enhancements.
- « The GNU C Library – ISO Random » (consulté le ).
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « C mathematical functions » (voir la liste des auteurs).
Liens externes
- math.h : mathematical declarations – Base Definitions Reference, The Single UNIX® Specification, Issue 7 from The Open Group
- C reference for math functions