oracular (7) math_error.7.gz

Provided by: manpages-fr_4.23.1-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 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)) {
               /* Traite un NaN / erreur de pôle / erreur de domaine */
           }

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

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,    Denis    Barbier    <barbier@debian.org>,    David     Prévot
       <david@tilapin.org>,   Cédric  Boutillier  <cedric.boutillier@gmail.com>  et  Jean-Pierre  Giraud  <jean-
       pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter à la  GNU  General  Public  License
       version 3   ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les  conditions  de  copie  et  de
       distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       ⟨debian-l10n-french@lists.debian.org⟩.