Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       feclearexcept,  fegetexceptflag,  feraiseexcept,  fesetexceptflag,  fetestexcept,  fegetenv,  fegetround,
       feholdexcept, fesetround, fesetenv, feupdateenv, feenableexcept, fedisableexcept, fegetexcept  -  Gestion
       des exceptions et des arrondis des nombres flottants

BIBLIOTHÈQUE

       Bibliothèque de math (libm, -lm)

SYNOPSIS

       #include <fenv.h>

       int feclearexcept(int excepts);
       int fegetexceptflag(fexcept_t *flagp, int excepts);
       int feraiseexcept(int excepts);
       int fesetexceptflag(const fexcept_t *flagp, int excepts);
       int fetestexcept(int excepts);

       int fegetround(void);
       int fesetround(int rounding_mode);

       int fegetenv(fenv_t *envp);
       int feholdexcept(fenv_t *envp);
       int fesetenv(const fenv_t *envp);
       int feupdateenv(const fenv_t *envp);

DESCRIPTION

       Ces  onze  fonctions ont été définies dans la norme C99, et décrivent la gestion des arrondis des nombres
       flottants et des exceptions (dépassement, division par zéro, etc.) sur les nombres flottants.

   Exceptions
       L'exception divide-by-zero (division par zéro) se produit quand une opération sur des nombres finis donne
       un résultat infini.

       L'exception  overflow  (dépassement)  se  produit  quand  un  résultat doit être représenté par un nombre
       flottant, mais que sa valeur absolue est trop grande pour être représentée par un nombre flottant.

       L'exception underflow (soupassement) se produit quand un résultat doit  être  représenté  par  un  nombre
       flottant, mais que sa valeur absolue est trop petite pour être représentée en nombre flottant.

       L'exception  inexact  se  produit quand le résultat arrondi d'une opération n'est pas égal au résultat en
       précision infinie. Elle peut se déclencher quand les exceptions overflow ou underflow se produisent.

       L'exception invalid se produit quand il n'y a pas de résultat  bien  défini  pour  une  opération,  comme
       « 0/0 » ou « infini-infini » ou « sqrt(-1) ».

   Gestion des exceptions
       Les  exceptions  sont  représentées  de  deux  manières : en tant qu'un unique bit (exception présente ou
       absente), et ces bits correspondent, de manière dépendant de l'implémentation, avec une position au  sein
       d'un  entier,  et  aussi  en  tant  que  structure opaque pouvant contenir plus d'informations concernant
       l'exception (éventuellement l'adresse du code déclenchant l'erreur).

       Chacune des macros FE_DIVBYZERO, FE_INEXACT, FE_INVALID, FE_OVERFLOW, FE_UNDERFLOW  est  définie  lorsque
       l'implémentation gère l'exception correspondante. Les bits sont alors définis, ainsi on peut appeler, par
       exemple, les fonctions de gestion  des  exceptions  avec  un  argument  entier  FE_OVERFLOW|FE_UNDERFLOW.
       D'autres  exceptions  peuvent  être supportées. La macro FE_ALL_EXCEPT est un masque au format OU binaire
       correspondant à toutes les exceptions supportées.

       La fonction feclearexcept() efface les exceptions supportées représentées par les bits de son argument.

       La fonction fegetexceptflag() stocke une représentation de  l'état  des  exceptions  contenues  dans  son
       argument excepts dans l'objet opaque *flagp.

       La  fonction  feraiseexcept()  déclenche  les  exceptions  supportées,  représentées  par les bits de son
       argument excepts.

       La fonction fesetexceptflag() définit l'état des exceptions représentées  par  l'argument  excepts  à  la
       valeur  *flagp.  Cette  valeur  doit  être  le  résultat d'un appel préalable à fegetexceptflag() avec un
       dernier argument contenant tous les bits dans excepts.

       La fonction fetestexcept() renvoie un mot dont les bits définis sont  également  les  bits  définis  dans
       l'argument excepts et pour lesquels l'exception correspondante est définie.

   Mode d'arrondis
       Le  mode  d'arrondi  détermine  comment  le résultat des opérations en virgule flottante doit être traité
       quand le résultat ne peut pas être représenté exactement dans la  mantisse.  Plusieurs  modes  d'arrondis
       peuvent  être  fournis : arrondi au plus proche (le mode par défaut), arrondi vers le haut (vers l'infini
       positif), arrondi vers le bas (vers l'infini négatif) et l'arrondi vers zéro.

       Chacune  des  macros  FE_TONEAREST,  FE_UPWARD,  FE_DOWNWARD  et  FE_TOWARDZERO   est   définie   lorsque
       l'implémentation gère la définition et la lecture de la direction d'arrondi correspondante.

       La fonction fegetround() renvoie la macro correspondant au mode d'arrondi en cours.

       La  fonction  fesetround()  définit  le mode d'arrondi tel qu'il est spécifié par son argument et renvoie
       zéro en cas de succès.

       C99 et POSIX.1-2008 spécifient un identifiant, FLT_ROUNDS, défini dans <float.h>,  qui  indique  le  mode
       d'arrondi  de  l'implémentation pour les additions en virgule flottante. Cet identifiant peut prendre une
       des valeurs suivantes :

       -1     Le mode d'arrondi est indéterminé.

       0      L'arrondi se fait vers 0.

       1      L'arrondi se fait vers le nombre le plus proche.

       2      L'arrondi se fait vers l'infini positif.

       3      L'arrondi se fait vers l'infini négatif.

       Les autres valeurs sont dépendantes des machines, et ne sont pas des modes d'arrondi standard.

       La valeur de FLT_ROUNDS devrait refléter  le  mode  d'arrondi  en  cours  tel  qu'il  est  configuré  par
       fesetround() (mais consultez la section des BOGUES).

   Environnement de virgule flottante
       L'environnement  de  virgule  flottante,  y compris les modes de contrôle et les drapeaux d'état, peuvent
       être manipulés sous forme d'un objet opaque de type fenv_t. L'environnement par défaut est représenté par
       FE_DFL_ENV  (de  type const fenv_t *). Il s'agit de la configuration de l'environnement au démarrage d'un
       programme, et elle est définie par ISO C comme ayant un arrondi au plus  proche,  toutes  les  exceptions
       effacées et un mode sans arrêt (continuer en présence des exceptions).

       La fonction fegetenv() sauve l'environnement de travail en cours en virgule flottante dans l'objet *envp.

       La fonction feholdexcept() effectue la même chose, puis efface tous les drapeaux d'exceptions, et bascule
       si possible sur un mode sans arrêt (continuer en présence des exceptions). Elle renvoie zéro  en  cas  de
       succès.

       La  fonction  fesetenv()  recharge  l'environnement  de  travail en virgule flottante à partir de l'objet
       *envp.  Cet  objet  doit  être  valide,  c'est-à-dire  être  le  résultat  d'un  appel  à  fegetenv()  ou
       feholdexcept(), ou égal à FE_DFL_ENV. Cet appel ne déclenche pas d'exception.

       La  fonction  feupdateenv()  installe  l'environnement de virgule flottante représenté par l'objet *envp,
       sauf que les exceptions déjà déclenchées ne sont pas effacées.  Après  l'appel  de  cette  fonction,  les
       exceptions  déclenchées  seront  un  OU  binaire entre l'ensemble précédent, et celui contenu dans *envp.
       Comme précédemment, l'objet  *envp doit être valide.

VALEUR RENVOYÉE

       Ces fonctions renvoient 0 en cas de succès et une valeur non nulle en cas d'erreur.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌───────────────────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├───────────────────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │feclearexcept(), fegetexceptflag(), feraiseexcept(),                   │ Sécurité des threads │ MT-Safe │
       │fesetexceptflag(), fetestexcept(), fegetround(), fesetround(),         │                      │         │
       │fegetenv(), feholdexcept(), fesetenv(), feupdateenv(),                 │                      │         │
       │feenableexcept(), fedisableexcept(), fegetexcept()                     │                      │         │
       └───────────────────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       C11, POSIX.1-2008, IEC 60559 (IEC 559:1989), ANSI/IEEE 854.

HISTORIQUE

       C99, POSIX.1-2001. glibc 2.1.

NOTES

   Notes de la glibc
       Si  possible,  la  bibliothèque  GNU C définit une macro FE_NOMASK_ENV qui représente un environnement où
       toutes les exceptions déclenchées entraînent une interception. La  présence  de  cette  macro  peut  être
       testée en utilisant #ifdef. Elle n'est définie que si _GNU_SOURCE est définie. Le standard C99 ne définit
       pas de méthode pour positionner les bits individuels dans le masque de  virgule  flottante,  par  exemple
       pour  intercepter  des  drapeaux  particuliers.  Depuis  la  glibc 2.2, la glibc gère feenableexcept() et
       fedisableexcept()  pour  définir  individuellement  des  interceptions   de   virgules   flottantes,   et
       fegetexcept() pour demander l'état.

       #define _GNU_SOURCE         /* Voir feature_test_macros(7) */
       #include <fenv.h>

       int feenableexcept(int excepts);
       int fedisableexcept(int excepts);
       int fegetexcept(void);

       Les  fonctions feenableexcept() et fedisableexcept() activent (désactivent) les interceptions pour chaque
       exception représentée par excepts et renvoient l'ensemble précédent des exceptions activées  lorsqu'elles
       réussissent,  et  -1  sinon.  La  fonction  fegetexcept()  renvoie l'ensemble des exceptions actuellement
       activées.

BOGUES

       C99 spécifie que la valeur de FLT_ROUNDS devrait refléter les changements du  mode  d'arrondi  en  cours,
       tels  qu'il est configuré par fesetround(). Actuellement, ce n'est pas le cas : FLT_ROUNDS prend toujours
       la valeur 1.

VOIR AUSSI

       math_error(7)

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> et Cédric Boutillier <cedric.boutillier@gmail.com>

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