Provided by: manpages-fr-dev_3.65d1p1-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

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

       Effectuez l'édition des liens avec l'option -lm.

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.

VERSIONS

       Ces fonctions ont été introduites dans la glibc dans sa version 2.1.

ATTRIBUTS

   Multithreading (voir pthreads(7))
       Les fonctions feclearexcept(), fegetexceptflag(), fegetexceptflag(),  fesetexceptflag(),  fetestexcept(),
       fegetround(),  fesetround(),  fegetenv(),  feholdexcept(),  fesetenv(),  feupdateenv(), feenableexcept(),
       fedisableexcept() et fegetexcept() sont sûres dans un contexte multithread.

CONFORMITÉ

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

NOTES

   Notes sur 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 version 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         /* Consultez 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)

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

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

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

Linux                                            1er avril 2014                                          FENV(3)