Provided by: manpages-fr_3.65d1p1-1_all bug

NOM

       math_error - Détecter des erreurs des fonctions mathématiques

SYNOPSIS

       #include <math.h>
       #include <errno.h>
       #include <fenv.h>

DESCRIPTION

       Quand  une  erreur  se  produit,  la  plupart des fonctions de bibliothèques l'indiquent en renvoyant une
       valeur spéciale (par exemple, -1 ou NULL). Parce qu'elles renvoient  en  général  un  nombre  en  virgule
       flottante, les fonctions mathématiques déclarées dans <math.h> indiquent une erreur en utilisant d'autres
       mécanismes. Il y a deux mécanismes d'indication d'erreur : l'ancien configure errno ; le nouveau  utilise
       le  mécanisme  d'exception  de  virgule  flottante (l'utilisation de feclearexcept(3) et fetestexcept(3),
       comme explicité ci-dessous) décrit dans fenv(3).

       Un programme portable qui doit vérifier les erreurs d'une fonction mathématique devrait  mettre  errno  à
       zéro et effectuer l'appel suivant :

           feclearexcept(FE_ALL_EXCEPT);

       avant d'appeler une fonction mathématique.

       Après  le  retour  d'une  fonction  mathématique,  si  errno est non nul ou si l'appel suivant (consultez
       fenv(3)) ne renvoie pas zéro :

           fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW |
                        FE_UNDERFLOW);

       alors une erreur s'est produite dans la fonction mathématique.

       Les conditions  d'erreur  qui  peuvent  se  produire  pour  les  fonctions  mathématiques  sont  décrites
       ci-dessous.

   Erreur de domaine
       Une  erreur  de  domaine se produit quand une fonction mathématique reçoit un paramètre dont la valeur se
       trouve en dehors du domaine de définition de la fonction (par exemple, fournir  un  paramètre  négatif  à
       log(3)).  Lorsqu'une  erreur  de  domaine  se  produit, les fonctions renvoient généralement un NaN (mais
       certaines fonctions renvoient une valeur différente dans ce cas) ; errno prend  la  valeur  EDOM  et  une
       exception de virgule flottante « incorrecte » (FE_INVALID) est levée.

   Erreur de pôle
       Une  erreur  de pôle se produit quand le résultat mathématique d'une fonction est un infini (par exemple,
       le logarithme de 0 est l'infini négatif). Quand une erreur de pôle se produit,  la  fonction  renvoie  la
       valeur  (signée)  HUGE_VAL,  HUGE_VALF ou HUGE_VALL suivant que la valeur de retour de la fonction est un
       double, un float ou un long double. Le signe du résultat est celui du résultat  correct  de  la  fonction
       mathématique.  errno  prend  la  valeur ERANGE et une exception de virgule flottante de division par zéro
       (FE_DIVBYZERO) est levée.

   Erreur d'intervalle
       Une erreur d'intervalle se produit quand le module du résultat de la fonction ne peut pas être représenté
       par  le  type  utilisé pour le résultat de la fonction. La valeur de retour de la fonction dépend suivant
       qu'il s'agit d'un dépassement (« overflow ») ou d'un soupassement (« underflow »).

       Un dépassement se produit pour le résultat flottant si le résultat est fini, mais trop  grand  pour  être
       représenté  dans  le  type  du  résultat.  Quand un dépassement se produit, la fonction renvoie la valeur
       HUGE_VAL, HUGE_VALF ou HUGE_VALL, suivant que le type de retour de la fonction est un double, un float ou
       un  long  double.  errno  prend  la  valeur  ERANGE  et une exception de virgule flottante de dépassement
       (FE_OVERFLOW) est levée.

       Un soupassement se produit pour le résultat flottant si le résultat est trop petit pour  être  représenté
       dans  le  type  du  résultat.  Quand  un  soupassement  se  produit,  une  fonction  mathématique renvoie
       généralement 0,0 (C99 indique qu'une fonction doit renvoyer « une valeur propre à  l'implémentation  dont
       le  module  n'est  pas  plus  grand que la plus petite valeur normalisée positive du type donné »). errno
       prend la valeur ERANGE et une exception de virgule flottante de  soupassement  (FE_UNDERFLOW)  peut  être
       levée.

       Certaines  fonctions  produisent une erreur d'intervalle si la valeur du paramètre fourni, ou le résultat
       exact de la fonction, est dénormalisé (« subnormal »). Une valeur dénormalisée est une valeur  qui  n'est
       pas  nulle,  mais  dont  le  module  est  si petit qu'il ne peut être représenté dans la forme normalisée
       (c'est-à-dire avec un 1 dans le bit de  poids  fort  de  la  mantisse).  La  représentation  d'un  nombre
       dénormalisé contiendra un ou plusieurs zéros en tête de la mantisse.

NOTES

       L'identifiant  math_errhandling  spécifié  par C99 et POSIX.1-2001 n'est pas pris en charge par la glibc.
       Cet identifiant est supposé indiquer lequel des deux mécanismes d'indication d'erreur est utilisé  (errno
       ou  des  exceptions récupérables avec fettestexcept(3)). Les normes imposent qu'au moins l'un d'entre eux
       soit utilisé, mais autorisent à ce que les deux soient disponibles. La situation  actuelle  de  la  glibc
       (version 2.8)  n'est pas très propre. La plupart des fonctions (mais pas toutes) lèvent des exceptions en
       cas d'erreur. Certaines positionnent également errno. Quelques  fonctions  positionnent  errno,  mais  ne
       lèvent  pas  d'exception.  Très peu ne font ni l'un ni l'autre. Consultez les différentes pages de manuel
       pour avoir les détails.

       Pour éviter la complexité d'avoir à utiliser errno et fetestexcept(3) pour la détection d'erreurs, il est
       souvent  recommandé de vérifier la validité des paramètres avant les appels. Par exemple, le code suivant
       s'assure que le paramètre de log(3) n'est ni un NaN, ni zéro (une erreur de pôle)  ou  inférieur  à  zéro
       (une erreur de domaine) :

           double x, r;

           if (isnan(x) || islessequal(x, 0)) {
               /* Deal with NaN / pole error / domain error */
           }

           r = log(x);

       La  discussion  sur  cette  page  ne  s'applique  pas  aux  fonctions mathématiques à variables complexes
       (c'est-à-dire celles déclarées par <complex.h>), pour lesquelles C99 et  POSIX.1-2001  n'exigent  pas  en
       général de renvoyer d'erreurs.

       L'option  de  gcc(1)  -fno-math-errno  permet  d'utiliser  des  implémentations  de  certaines  fonctions
       mathématiques plus rapides que les implémentations standard, mais qui ne positionnent pas errno (l'option
       -ffast-math  de  gcc(1)  active  également  -fno-math-errno).  Une  erreur  peut  toujours être testée en
       utilisant fetestexcept(3).

VOIR AUSSI

       gcc(1), errno(3), fenv(3), fpclassify(3), INFINITY(3), isgreater(3), matherr(3), nan(3)

       info libc

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Alain Portal <http://manpagesfr.free.fr/> (2008).

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».