Man page - math_error(7)

Packages contains this manual

Available languages:

en fr ja ru ro de

Manual

math_error

NOM
SYNOPSIS
DESCRIPTION
Erreur de domaine
Erreur de pĂŽle
Erreur d’intervalle
NOTES
VOIR AUSSI
TRADUCTION

NOM

math_error - Détecter des erreurs des fonctions mathématiques

SYNOPSIS

#include <math.h>
#include <errno.h>
#include <fenv.h>

DESCRIPTION

Quand une erreur se produit, la plupart des fonctions de bibliothĂšques l’indiquent en renvoyant une valeur spĂ©ciale (par exemple, -1 ou NULL). Parce qu’elles renvoient en gĂ©nĂ©ral un nombre en virgule flottante, les fonctions mathĂ©matiques dĂ©clarĂ©es dans <math.h> indiquent une erreur en utilisant d’autres mĂ©canismes. Il y a deux mĂ©canismes d’indication d’erreur : l’ancien configure errno ; le nouveau utilise le mĂ©canisme d’exception de virgule flottante (l’utilisation de feclearexcept (3) et fetestexcept (3), comme explicitĂ© ci-dessous) dĂ©crit dans fenv (3).

Un programme portable qui doit vĂ©rifier les erreurs d’une fonction mathĂ©matique devrait mettre errno Ă  zĂ©ro et effectuer l’appel suivant :

feclearexcept(FE_ALL_EXCEPT);

avant d’appeler une fonction mathĂ©matique.

AprĂšs le retour d’une fonction mathĂ©matique, si errno est non nul ou si l’appel suivant (consultez fenv (3)) ne renvoie pas zĂ©ro :

fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW |
FE_UNDERFLOW);

alors une erreur s’est produite dans la fonction mathĂ©matique.

Les conditions d’erreur qui peuvent se produire pour les fonctions mathĂ©matiques sont dĂ©crites ci-dessous.

Erreur de domaine

Une erreur de domaine se produit quand une fonction mathĂ©matique reçoit un paramĂštre dont la valeur se trouve en dehors du domaine de dĂ©finition de la fonction (par exemple, fournir un paramĂštre nĂ©gatif Ă  log (3)). Lorsqu’une erreur de domaine se produit, les fonctions renvoient gĂ©nĂ©ralement un NaN (mais certaines fonctions renvoient une valeur diffĂ©rente dans ce cas) ; errno prend la valeur EDOM et une exception de virgule flottante « incorrecte » ( FE_INVALID ) est levĂ©e.

Erreur de pĂŽle

Une erreur de pĂŽle se produit quand le rĂ©sultat mathĂ©matique d’une fonction est un infini (par exemple, le logarithme de 0 est l’infini nĂ©gatif). Quand une erreur de pĂŽle se produit, la fonction renvoie la valeur (signĂ©e) HUGE_VAL , HUGE_VALF ou HUGE_VALL suivant que la valeur de retour de la fonction est un double , un float ou un long double . Le signe du rĂ©sultat est celui du rĂ©sultat correct de la fonction mathĂ©matique. errno prend la valeur ERANGE et une exception de virgule flottante de division par zĂ©ro ( FE_DIVBYZERO ) est levĂ©e.

Erreur d’intervalle

Une erreur d’intervalle se produit quand le module du rĂ©sultat de la fonction ne peut pas ĂȘtre reprĂ©sentĂ© par le type utilisĂ© pour le rĂ©sultat de la fonction. La valeur de retour de la fonction dĂ©pend suivant qu’il s’agit d’un dĂ©passement (« overflow ») ou d’un soupassement (« underflow »).

Un dĂ©passement se produit pour le rĂ©sultat flottant si le rĂ©sultat est fini, mais trop grand pour ĂȘtre reprĂ©sentĂ© dans le type du rĂ©sultat. Quand un dĂ©passement se produit, la fonction renvoie la valeur HUGE_VAL , HUGE_VALF ou HUGE_VALL , suivant que le type de retour de la fonction est un double , un float ou un long double . errno prend la valeur ERANGE et une exception de virgule flottante de dĂ©passement ( FE_OVERFLOW ) est levĂ©e.

Un soupassement se produit pour le rĂ©sultat flottant si le rĂ©sultat est trop petit pour ĂȘtre reprĂ©sentĂ© dans le type du rĂ©sultat. Quand un soupassement se produit, une fonction mathĂ©matique renvoie gĂ©nĂ©ralement 0,0 (C99 indique qu’une fonction doit renvoyer « une valeur propre Ă  l’implĂ©mentation dont le module n’est pas plus grand que la plus petite valeur normalisĂ©e positive du type donné »). errno prend la valeur ERANGE et une exception de virgule flottante de « soupassement » ( FE_UNDERFLOW ) peut ĂȘtre levĂ©e.

Certaines fonctions produisent une erreur d’intervalle si la valeur du paramĂštre fourni, ou le rĂ©sultat exact de la fonction, est dĂ©normalisĂ© (« subnormal »). Une valeur dĂ©normalisĂ©e est une valeur qui n’est pas nulle, mais dont le module est si petit qu’il ne peut ĂȘtre reprĂ©sentĂ© dans la forme normalisĂ©e (c’est-Ă -dire avec un 1 dans le bit de poids fort de la mantisse). La reprĂ©sentation d’un nombre dĂ©normalisĂ© contiendra un ou plusieurs zĂ©ros en tĂȘte de la mantisse.

NOTES

L’identifiant math_errhandling spĂ©cifiĂ© par C99 et POSIX.1 n’est pas pris en charge par la glibc. Cet identifiant est supposĂ© indiquer lequel des deux mĂ©canismes d’indication d’erreur est utilisĂ© ( errno ou des exceptions rĂ©cupĂ©rables avec fettestexcept (3)). Les normes imposent qu’au moins l’un d’entre eux soit utilisĂ©, mais autorisent Ă  ce que les deux soient disponibles. La situation actuelle de la glibc (version 2.8) n’est pas trĂšs propre. La plupart des fonctions (mais pas toutes) lĂšvent des exceptions en cas d’erreur. Certaines positionnent Ă©galement errno . Quelques fonctions positionnent errno , mais ne lĂšvent pas d’exception. TrĂšs peu ne font ni l’un ni l’autre. Consultez les diffĂ©rentes pages de manuel pour avoir les dĂ©tails.

Pour Ă©viter la complexitĂ© d’avoir Ă  utiliser errno et fetestexcept (3) pour la dĂ©tection d’erreurs, il est souvent recommandĂ© de vĂ©rifier la validitĂ© des paramĂštres avant les appels. Par exemple, le code suivant s’assure que le paramĂštre de log (3) n’est ni un NaN, ni zĂ©ro (une erreur de pĂŽle) ou infĂ©rieur Ă  zĂ©ro (une erreur de domaine) :

double x, r;
if (isnan(x) || islessequal(x, 0)) {
/* Traite un NaN / erreur de pĂŽle / erreur de domaine */
}
r = log(x);

La discussion sur cette page ne s’applique pas aux fonctions mathĂ©matiques Ă  variables complexes (c’est-Ă -dire celles dĂ©clarĂ©es par <complex.h> ), pour lesquelles C99 et POSIX.1 n’exigent pas en gĂ©nĂ©ral de renvoyer d’erreurs.

L’option de gcc (1) -fno-math-errno permet d’utiliser des implĂ©mentations de certaines fonctions mathĂ©matiques plus rapides que les implĂ©mentations standard, mais qui ne positionnent pas errno (l’option -ffast-math de gcc (1) active Ă©galement -fno-math-errno ). Une erreur peut toujours ĂȘtre testĂ©e en utilisant fetestexcept (3).

VOIR AUSSI

gcc (1), errno (3), fenv (3), fpclassify (3), INFINITY (3), isgreater (3), matherr (3), nan (3)

info libc

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>, Cédric Boutillier <cedric.boutillier@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

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 .