Provided by:
manpages-fr-dev_3.32d0.2p4-1_all 
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
(depassement, 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 (depassement) 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 (soupassement) 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 dependant de 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 dans la mantisse. Plusieurs modes d'arrondis
peuvent etre fournis : arrondi 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'arrondi 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 nombre le plus proche.
2 L'arrondi se fait vers l'infini positif.
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'arrondi en cours tel
qu'il est configure par fesetround() (mais consultez la section des
BOGUES).
Environnement de virgule flottante
L'environnement de 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() ou
feholdexcept(), ou egal a FE_DFL_ENV. Cet appel ne declenche pas
d'exception.
La fonction feupdateenv() installe l'environnement de 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 ou toutes les exceptions declenchees
entrainent une interception. La presence de cette macro peut etre
testee en utilisant #ifdef. Elle n'est definie que si _GNU_SOURCE est
definie. Le standard C99 ne definit pas de methode 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
gere feenableexcept() et fedisableexcept() pour definir
individuellement des interceptions de virgules flottantes, et
fegetexcept() pour demander l'etat.
#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
(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'arrondi en cours, tels qu'il est configure 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.32 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> >>.