Provided by: manpages-fr-dev_3.27fr1.4-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'edition des liens avec l'option -lm.

DESCRIPTION

       Ces onze fonctions ont ete definies dans la norme C99, et decrivent  la
       gestion   des   arrondis   des  nombres  flottants  et  des  exceptions
       (debordement, division par zero, etc.) sur les nombres flottants.

   Exceptions
       L'exception divide-by-zero (division par zero)  se  produit  quand  une
       operation sur des nombres finis donne un resultat infini.

       L'exception  overflow  (debordement)  se produit quand un resultat doit
       etre represente par un nombre flottant, mais que sa valeur absolue  est
       trop grande pour etre representee par un nombre flottant.

       L'exception underflow se produit quand un resultat doit etre represente
       par un nombre flottant, mais que sa valeur absolue est trop petite pour
       etre representee en nombre flottant.

       L'exception   inexact  se  produit  quand  le  resultat  arrondi  d'une
       operation n'est pas egal au resultat en precision infinie. Elle peut se
       declencher quand les exceptions overflow ou underflow se produisent.

       L'exception  invalid  se  produit  quand  il n'y a pas de resultat bien
       defini pour une operation, comme << 0/0 >>  ou  << infini-infini >>  ou
       << sqrt(-1) >>.

   Gestion des exceptions
       Les  exceptions  sont  representees  de  deux  manieres : en tant qu'un
       unique bit (exception presente ou absente), et ces bits  correspondent,
       de  maniere  dependante  a  l'implementation, avec une position au sein
       d'un entier, et aussi en tant que  structure  opaque  pouvant  contenir
       plus d'informations concernant l'exception (eventuellement l'adresse du
       code declenchant l'erreur).

       Chacune des macros FE_DIVBYZERO, FE_INEXACT,  FE_INVALID,  FE_OVERFLOW,
       FE_UNDERFLOW  est  definie  lorsque  l'implementation  gere l'exception
       correspondante. Les bits sont alors definis, ainsi on peut appeler, par
       exemple,  les  fonctions  de  gestion  des  exceptions avec un argument
       entier  FE_OVERFLOW|FE_UNDERFLOW.  D'autres  exceptions  peuvent   etre
       supportees.  La  macro FE_ALL_EXCEPT est un masque au format OU binaire
       correspondant a toutes les exceptions supportees.

       La  fonction   feclearexcept()   efface   les   exceptions   supportees
       representees par les bits de son argument.

       La  fonction  fegetexceptflag() stocke une representation de l'etat des
       exceptions contenues dans son  argument  excepts  dans  l'objet  opaque
       *flagp.

       La   fonction  feraiseexcept()  declenche  les  exceptions  supportees,
       representees par les bits de son argument excepts.

       La fonction fesetexceptflag() fixe l'etat des  exceptions  representees
       par  l'argument  excepts  a la valeur *flagp. Cette valeur doit etre le
       resultat d'un appel  prealable  a  fegetexceptflag()  avec  un  dernier
       argument contenant tous les bits dans excepts.

       La  fonction  fetestexcept()  renvoie un mot dont les bits definis sont
       egalement les bits definis dans l'argument  excepts  et  pour  lesquels
       l'exception correspondante est definie.

   Mode d'arrondis
       Le  mode  d'arrondi  determine  comment  le  resultat des operations en
       virgule flottante doit etre traite quand le resultat ne peut  pas  etre
       represente   exactement   avec  le  << significand >>  (la  precision).
       Plusieurs modes d'arrondis peuvent  etre  fournis :  arrondis  au  plus
       proche  (le  mode  par  defaut),  arrondi  vers  le haut (vers l'infini
       positif), arrondi vers le bas (vers l'infini negatif) et l'arrondi vers
       zero.

       Chacune    des   macros   FE_TONEAREST,   FE_UPWARD,   FE_DOWNWARD   et
       FE_TOWARDZERO est definie lorsque l'implementation gere  la  definition
       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()  definit  le  mode  d'arrondi  tel  qu'il  est
       specifie par son argument et renvoie zero en cas de succes.

       C99  et POSIX.1-2008 specifient un identifiant, FLT_ROUNDS, defini dans
       <float.h>, qui indique le mode d'arrondis de l'implementation pour  les
       additions  en  virgule  flottante. Cet identifiant peut prendre une des
       valeurs suivantes :

       -1     Le mode d'arrondi est indetermine.

       0      L'arrondi se fait vers 0.

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

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

       3      L'arrondi se fait vers l'infini negatif.

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

       La  valeur  de  FLT_ROUNDS devrait refleter le mode d'arrondis en cours
       tel qu'il est configure par fesetround() (mais consultez la section des
       BOGUES).

   Environnement en virgule flottante
       L'environnement de travail en virgule flottante, y compris les modes de
       controle et les drapeaux d'etat peuvent etre manipules sous forme  d'un
       objet opaque de type fenv_t. L'environnement par defaut, est represente
       par FE_DFL_ENV (de type const fenv_t *). Il s'agit de la  configuration
       de l'environnement au demarrage d'un programme, et elle est definie par
       ISO C comme ayant un arrondi au  plus  proche,  toutes  les  exceptions
       effacees et un mode sans arret (continuer en presence des exceptions).

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

       La fonction feholdexcept() effectue la meme chose, puis efface tous les
       drapeaux  d'exceptions,  et  bascule si possible sur un mode sans arret
       (continuer en presence des exceptions). Elle renvoie  zero  en  cas  de
       succes.

       La  fonction  fesetenv() recharge l'environnement de travail en virgule
       flottante a partir de  l'objet  *envp.  Cet  objet  doit  etre  valide,
       c'est-a-dire   etre   le   resultat   d'un   appel   a  fegetenv(),  de
       feholdexcept() ou  egal  a  FE_DFL_ENV.  Cet  appel  ne  declenche  pas
       d'exception.

       La fonction feupdateenv() installe l'environnement en virgule flottante
       represente par l'objet *envp, sauf que les exceptions deja  declenchees
       ne  sont  pas effacees. Apres l'appel de cette fonction, les exceptions
       declenchees seront un OU binaire entre l'ensemble precedent,  et  celui
       contenu  dans  *envp.  Comme  precedemment,  l'objet   *envp  doit etre
       valide.

VALEUR RENVOY'EE

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

VERSIONS

       Ces fonctions ont ete introduites dans la glibc dans sa version 2.1.

CONFORMIT'E

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

NOTES

   Notes sur la glibc
       Si  possible, la bibliotheque GNU C definit une macro FE_NOMASK_ENV qui
       represente un environnement lorsque toutes les  exceptions  declenchees
       entraine  une interception. La presence de cette macro peut etre testee
       en utilisant #ifdef. Elle n'est definie que si la constante  symbolique
       _GNU_SOURCE  est  definie.  Le  standard  C99  ne  definit  pas comment
       positionner les bits individuels dans le masque de  virgule  flottante,
       par  exemple  pour  intercepter des drapeaux particuliers. La glibc 2.2
       gere    feenableexcept()    et    fedisableexcept()    pour     definir
       individuellement  des  interceptions,  et  fegetexcept()  pour demander
       l'etat.

       #define _GNU_SOURCE
       #include <fenv.h>

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

       Les   fonctions   feenableexcept()   et   fedisableexcept()    activent
       (desactivent)  les  interceptions pour chaque exception representee par
       excepts et  renvoient  l'ensemble  precedent  des  exceptions  activees
       lorsqu'elles  reussissent,  et  -1  sinon.  La  fonction  fegetexcept()
       renvoie l'ensemble des exceptions actuellement activees.

BOGUES

       C99  specifie  que  la  valeur  de  FLT_ROUNDS  devrait  refleter   les
       changements  du mode d'arrondis en cours, tels qu'ils sont demandes par
       fesetround(). Actuellement, ce n'est  pas  le  cas :  FLT_ROUNDS  prend
       toujours la valeur 1.

VOIR AUSSI

       feature_test_macros(7), math_error(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

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

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

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.

Linux                            11 aout 2008                          FENV(3)