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