Man page - feupdateenv(3)

Packages contains this manual

Available languages:

en fr pt_BR es pl ja ru

Manual

fenv

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Exceptions
Gestion des exceptions
Mode d’arrondis
Environnement de virgule flottante
VALEUR RENVOYÉE
ATTRIBUTS
STANDARDS
HISTORIQUE
NOTES
Notes de la glibc
BOGUES
VOIR AUSSI
TRADUCTION

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

Image grohtml-3885822-1.png

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 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 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Ă©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)

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 <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.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.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.boutillier@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 à debian-l10n-french@lists.debian.org .