Provided by: manpages-fr-dev_4.27.0-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 tes‐
       té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  fedi‐
       sableexcept()  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  acti‐
       vé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  <tvi‐
       gnaud@mandriva.com>,  François  Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fe‐
       vrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau  <jcristau@de‐
       bian.org>,   Thomas   Huriaux   <thomas.huriaux@gmail.com>,  Nicolas  François  <nicolas.francois@centra‐
       liens.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.boutil‐
       lier@gmail.com>

       Cette traduction est une documentation libre ; veuillez vous  reporter  à  la  GNU General Public License
       version 3 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 à de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.9.1                     2 mai 2024                                            fenv(3)