.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk .\" .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH MATH_ERROR 7 "15 septembre 2017" Linux "Manuel du programmeur Linux" .SH NOM math_error \- Détecter des erreurs des fonctions mathématiques .SH SYNOPSIS .nf \fB#include \fP \fB#include \fP \fB#include \fP .fi .SH 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 \fI\fP indiquent une erreur en utilisant d'autres mécanismes. Il y a deux mécanismes d'indication d'erreur\ : l'ancien configure \fIerrno\fP\ ; le nouveau utilise le mécanisme d'exception de virgule flottante (l'utilisation de \fBfeclearexcept\fP(3) et \fBfetestexcept\fP(3), comme explicité ci\-dessous) décrit dans \fBfenv\fP(3). .PP Un programme portable qui doit vérifier les erreurs d'une fonction mathématique devrait mettre \fIerrno\fP à zéro et effectuer l'appel suivant\ : .PP .in +4n .EX feclearexcept(FE_ALL_EXCEPT); .EE .in .PP avant d'appeler une fonction mathématique. .PP Après le retour d'une fonction mathématique, si \fIerrno\fP est non nul ou si l'appel suivant (consultez \fBfenv\fP(3)) ne renvoie pas zéro\ : .PP .in +4n .EX fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW); .EE .in .PP .\" enum .\" { .\" FE_INVALID = 0x01, .\" __FE_DENORM = 0x02, .\" FE_DIVBYZERO = 0x04, .\" FE_OVERFLOW = 0x08, .\" FE_UNDERFLOW = 0x10, .\" FE_INEXACT = 0x20 .\" }; alors une erreur s'est produite dans la fonction mathématique. .PP Les conditions d'erreur qui peuvent se produire pour les fonctions mathématiques sont décrites ci\-dessous. .SS "Erreur de domaine" Une \fIerreur de domaine\fP 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 à \fBlog\fP(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)\ ; \fIerrno\fP prend la valeur \fBEDOM\fP et une exception de virgule flottante «\ incorrecte\ » (\fBFE_INVALID\fP) est levée. .SS "Erreur de pôle" Une \fIerreur de pôle\fP 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) \fBHUGE_VAL\fP, \fBHUGE_VALF\fP ou \fBHUGE_VALL\fP suivant que la valeur de retour de la fonction est un \fIdouble\fP, un \fIfloat\fP ou un \fIlong double\fP. Le signe du résultat est celui du résultat correct de la fonction mathématique. \fIerrno\fP prend la valeur \fBERANGE\fP et une exception de virgule flottante de division par zéro (\fBFE_DIVBYZERO\fP) est levée. .SS "Erreur d'intervalle" Une \fIerreur d'intervalle\fP 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\ »). .PP Un \fIdépassement\fP 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 \fBHUGE_VAL\fP, \fBHUGE_VALF\fP ou \fBHUGE_VALL\fP, suivant que le type de retour de la fonction est un \fIdouble\fP, un \fIfloat\fP ou un \fIlong double\fP. \fIerrno\fP prend la valeur \fBERANGE\fP et une exception de virgule flottante de dépassement (\fBFE_OVERFLOW\fP) est levée. .PP Un \fIsoupassement\fP 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é\ »). \fIerrno\fP prend la valeur \fBERANGE\fP et une exception de virgule flottante de soupassement (\fBFE_UNDERFLOW\fP) peut être levée. .PP Certaines fonctions produisent une erreur d'intervalle si la valeur du paramètre fourni, ou le résultat exact de la fonction, est \fIdénormalisé\fP («\ 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. .SH NOTES .\" See CONFORMANCE in the glibc 2.8 (and earlier) source. The \fImath_errhandling\fP identifier specified by C99 and POSIX.1 is not supported by glibc. This identifier is supposed to indicate which of the two error\-notification mechanisms (\fIerrno\fP, exceptions retrievable via \fBfettestexcept\fP(3)) is in use. The standards require that at least one be in use, but permit both to be available. The current (version 2.8) situation under glibc is messy. Most (but not all) functions raise exceptions on errors. Some also set \fIerrno\fP. A few functions set \fIerrno\fP, but don't raise an exception. A very few functions do neither. See the individual manual pages for details. .PP .\" http://www.securecoding.cert.org/confluence/display/seccode/FLP32-C.+Prevent+or+detect+domain+and+range+errors+in+math+functions Pour éviter la complexité d'avoir à utiliser \fIerrno\fP et \fBfetestexcept\fP(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 \fBlog\fP(3) n'est ni un NaN, ni zéro (une erreur de pôle) ou inférieur à zéro (une erreur de domaine)\ : .PP .in +4n .EX double x, r; if (isnan(x) || islessequal(x, 0)) { /* Deal with NaN / pole error / domain error */ } r = log(x); .EE .in .PP The discussion on this page does not apply to the complex mathematical functions (i.e., those declared by \fI\fP), which in general are not required to return errors by C99 and POSIX.1. .PP L'option de \fBgcc\fP(1) \fI\-fno\-math\-errno\fP permet d'utiliser des implémentations de certaines fonctions mathématiques plus rapides que les implémentations standard, mais qui ne positionnent pas \fIerrno\fP (l'option \fI\-ffast\-math\fP de \fBgcc\fP(1) active également \fI\-fno\-math\-errno\fP). Une erreur peut toujours être testée en utilisant \fBfetestexcept\fP(3). .SH "VOIR AUSSI" \fBgcc\fP(1), \fBerrno\fP(3), \fBfenv\fP(3), \fBfpclassify\fP(3), \fBINFINITY\fP(3), \fBisgreater\fP(3), \fBmatherr\fP(3), \fBnan\fP(3) .PP \fIinfo libc\fP .SH COLOPHON Cette page fait partie de la publication\ 5.04 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Cédric Boutillier . Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE 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 à .MT debian-l10n-french@lists.debian.org .ME .