dwww Home | Manual pages | Find package

fenv(3)                    Library Functions Manual                    fenv(3)

NOM
       feclearexcept,  fegetexceptflag, feraiseexcept, fesetexceptflag, fetes-
       texcept,  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épasse-
       ment, 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éra-
       tion 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 cor-
       respondante. Les bits sont alors définis, ainsi on  peut  appeler,  par
       exemple,  les  fonctions de gestion des exceptions avec un argument en-
       tier FE_OVERFLOW|FE_UNDERFLOW. D'autres exceptions peuvent être suppor-
       tées. La macro FE_ALL_EXCEPT est un masque au format OU binaire corres-
       pondant à toutes les exceptions supportées.

       La fonction feclearexcept() efface les exceptions supportées  représen-
       té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ésen-
       té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 vir-
       gule flottante doit être traité quand le résultat ne peut pas être  re-
       présenté  exactement  dans  la  mantisse.  Plusieurs  modes  d'arrondis
       peuvent être fournis : arrondi au plus proche (le mode par défaut), ar-
       rondi  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_TOWARD-
       ZERO est définie lorsque l'implémentation gère la définition et la lec-
       ture de la direction d'arrondi correspondante.

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

       La fonction fesetround() définit le mode d'arrondi tel qu'il est spéci-
       fié 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 ef-
       facé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  feholdex-
       cept(), 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 va-
       lide.

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é ajoutées dans la glibc 2.1.

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

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

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

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 en-
       traî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 in-
       dividuels  dans le masque de virgule flottante, par exemple pour inter-
       cepter 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ésac-
       tivent) 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 change-
       ments du mode d'arrondi en cours, tels qu'il est  configuré  par  fese-
       tround(). 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  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.org>,  David  Prévot <david@tilapin.org> et Cédric Boutillier <ce-
       dric.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⟩.

Pages du manuel de Linux 6.03   5 février 2023                         fenv(3)

Generated by dwww version 1.15 on Sat Jun 29 00:26:19 CEST 2024.