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].
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++).
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.
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
↑ a et b(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. (ISBN0-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. (ISBN0-672-32696-5), Appendix B, Section VIII: C99 Numeric Computational Enhancements.
↑(en) Stephen Prata, C primer plus : Includes Index, Sams Publishing, , 959 p. (ISBN0-672-32696-5), Appendix B, Section VIII: C99 Numeric Computational Enhancements.