Math.h
# Math.h

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,, 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é.

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.

| | 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 |
| Fonctions exponentielles | exp2 | retourne 2 élevé à la puissance demandée |
| Fonctions exponentielles | expm1 | retourne e élevé à la puissance demandée moins 1 |
| Fonctions exponentielles | log | calcule le logarithme naturel (en base e) |
| Fonctions exponentielles | log2 | calcule le logarithme binaire (en base 2) |
| Fonctions exponentielles | log10 | calcule le logarithme décimal (en base 10) |
| Fonctions exponentielles | log1p | calcule le logarithme naturel (en base e) de 1 plus le nombre donné |
| Fonctions exponentielles | ilogb | extrait l'exposant d'un nombre |
| Fonctions exponentielles | logb | extrait l'exposant d'un nombre |
| Fonctions puissance | sqrt | calcule la racine carrée |
| Fonctions puissance | cbrt | calcule la racine cubique |
| Fonctions puissance | hypot | calcule la racine carrée de la somme des carrés des deux nombres donnés |
| Fonctions puissance | pow | élève un nombre à la puissance donnée |
| Fonctions trigonométriques | sin | calcule le sinus |
| Fonctions trigonométriques | cos | calcule le cosinus |
| Fonctions trigonométriques | tan | calcule la tangente |
| Fonctions trigonométriques | asin | calcule l'arc sinus |
| Fonctions trigonométriques | acos | calcule l'arc cosinus |
| Fonctions trigonométriques | atan | calcule l'arc tangente |
| Fonctions trigonométriques | atan2 | calcule l'arc tangente, en utilisant le signe pour déterminer le quadrant |
| Fonctions hyperboliques | sinh | calcule le sinus hyperbolique |
| Fonctions hyperboliques | cosh | calcule le cosinus hyperbolique |
| Fonctions hyperboliques | tanh | calcule la tangente hyperbolique |
| Fonctions hyperboliques | asinh | calcule l'arc sinus hyperbolique |
| Fonctions hyperboliques | acosh | calcule l'arc cosinus hyperbolique |
| Fonctions hyperboliques | atanh | calcule l'arc tangente hyperbolique |
| Fonction d'erreur et fonction gamma | erf | calcule la fonction d'erreur |
| Fonction d'erreur et fonction gamma | erfc | calcule la fonction d'erreur complémentaire |
| Fonction d'erreur et fonction gamma | lgamma | calcule le logarithme naturel de la valeur absolue de la fonction gamma |
| Fonction d'erreur et fonction gamma | tgamma | calcule la fonction gamma |
| Opérations d'arrondi | ceil | renvoie le nombre entier supérieur le plus proche |
| Opérations d'arrondi | floor | renvoie le nombre entier inférieur le plus proche |
| Opérations d'arrondi | trunc | retourne l'entier le plus proche dont la valeur absolue est inférieure |
| Opérations d'arrondi | round lround llround | retourne l'entier le plus proche, suivant les règles d'arrondi |
| Opérations d'arrondi | nearbyint | retourne l'entier le plus proche en utilisant la méthode d'arrondi courante |
| Opérations d'arrondi | 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 |
| Fonctions de manipulation de nombres à virgule flottante | ldexp | multiplie un nombre par un nombre élevé à une puissance de 2 |
| Fonctions de manipulation de nombres à virgule flottante | modf | décompose un nombre en un entier et sa partie fractionnelle. |
| Fonctions de manipulation de nombres à virgule flottante | scalbn scalbln | multiplie un nombre par FLT_RADIX élevé à une puissance donnée |
| Fonctions de manipulation de nombres à virgule flottante | nextafter nexttoward | retourne la prochaine valeur représentable en virgule flottante |
| Fonctions de manipulation de nombres à virgule flottante | copysign | copie le signe d'un nombre à virgule flottante |
| Classification | fpclassify | catégorise une valeur en virgule flottante |
| Classification | isfinite | vérifie si le nombre donné a une valeur finie |
| Classification | isinf | vérifie si le nombre donné a une valeur infinie |
| Classification | isnan | vérifie si le nombre donné est NaN |
| Classification | isnormal | vérifie si le nombre donné est normal |
| Classification | 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. 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) |
| Opérations de base | carg | calcule l'argument(C99) |
| Opérations de base | cimag | renvoie la partie imaginaire d'un nombre complexe (C99) |
| Opérations de base | creal | renvoie la partie réelle d'un nombre complexe (C99) |
| Opérations de base | conj | renvoie le conjugué d'un nombre complexe (C99) |
| Opérations de base | 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) |
| Opérations exponentielles | clog | calcule le logarithme d'un nombre complexe (C99) |
| Opérations exponentielles | csqrt | calcule la racine carrée d'un nombre complexe (C99) |
| Opérations exponentielles | cpow | calcule la puissance d'un nombre complexe (C99) |
| Opérations trigonométriques | csin | calcule le sinus d'un nombre complexe (C99) |
| Opérations trigonométriques | ccos | calcule le cosinus d'un nombre complexe (C99) |
| Opérations trigonométriques | ctan | calcule la tangente d'un nombre complexe (C99) |
| Opérations trigonométriques | casin | calcule l'arc sinus d'un nombre complexe (C99) |
| Opérations trigonométriques | cacos | calcule l'arc cosinus d'un nombre complexe (C99) |
| Opérations trigonométriques | catan | calcule l'arc tangente d'un nombre complexe (C99) |
| Opérations hyperboliques | csinh | calcule le sinus hyperbolique d'un nombre complexe (C99) |
| Opérations hyperboliques | ccosh | calcule le cosinus hyperbolique d'un nombre complexe (C99) |
| Opérations hyperboliques | ctanh | calcule la tangente hyperbolique d'un nombre complexe (C99) |
| Opérations hyperboliques | casinh | calcule l'arc sinus hyperbolique d'un nombre complexe (C99) |
| Opérations hyperboliques | cacosh | calcule l'arc cosinus hyperbolique d'un nombre complexe (C99) |
| Opérations hyperboliques | 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.

| 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.

