Macro de la bibliothèque C -EDOM
Bibliothèque standard C - <errno.h>
Description
Macro de la bibliothèque CEDOMIndique une erreur de domaine, qui se produit lorsqu'un argument d'entrée sort du domaine défini par la fonction mathématique, et errno est défini sur EDOM.
EDOMC'est une macro de la bibliothèque standard C, définie dans<errno.h>le fichier d'en-tête. Il est utilisé pour représenter une erreur de domaine d'argument de fonction mathématique, c'est-à-dire que l'argument de la fonction dépasse le domaine mathématique. Cela se produit généralement dans les fonctions de la bibliothèque mathématique (telles quesqrt、log、asinLorsque (etc.) reçoit des paramètres d'entrée illégaux.
Déclaration
Ce qui suit est une utilisation deEDOMun exemple montrant comment gérer les erreurs de domaine d'argument de fonction mathématique :
#define EDOM some_value
Paramètre
- N/D
Valeur de retour
- N/D
Exemple
L'exemple suivant démontre l'utilisation de la macro EDOM.
Exemple
#include <math.h>
#include <errno.h>
int main() {
double x = -1.0;
double result;
// Effacer l'erreur précédente
errno = 0;
// Appeler la fonction sqrt, passer une valeur négative provoquera une erreur de domaine
result = sqrt(x);
if (errno == EDOM) {
printf("Erreur : erreur de domaine de sqrt(), la valeur d'entrée est %f\n", x);
} else {
printf("La racine carrée de %f est %f\n", x, result);
}
return 0;
}
Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :
The square root of -1.000000 is nan
Dans cet exemple :
- Nous tentons de calculer la racine carrée de -1, ce qui est une opération en dehors du domaine, car les nombres négatifs n'ont pas de racine carrée réelle.
sqrtLa fonction détectera cette erreur de domaine, eterrnoDéfini àEDOM。- Nous vérifions
errnola valeur de, si elle estEDOM, puis affichez le message d'erreur correspondant.
fonctions mathématiques associées
Voici quelques-unes qui peuvent définirerrnoestEDOMfonctions mathématiques :
sqrt(x): quandx < 0Lorsque ..., elle définiraerrnoestEDOM。log(x): quandx <= 0Lorsque ..., elle définiraerrnoestEDOM。asin(x)etacos(x): quandxLorsqu'il n'est pas dans l'intervalle [-1, 1], il définiraerrnoestEDOM。pow(x, y): quandx < 0etyLorsqu'il n'est pas un entier, il définiraerrnoestEDOM。
Notes d'utilisation
- Vérifiez la valeur de retour: Après avoir appelé une fonction mathématique susceptible de produire une erreur de domaine, vous devez vérifier la valeur de retour, et lorsque la fonction renvoie une valeur spéciale (telle que
NaN) lors de la vérificationerrno。 - Initialiser
errno: avant d'appeler la fonction, vous devezerrnodéfinir à 0 pour garantir que le code d'erreur est généré par cet appel plutôt que d'être un reste d'un appel précédent. - Sécurité des threads: dans les programmes multithread,
errnogénéralement implémenté sous forme de stockage local au thread (TLS), garantissant que chaque thread possède son propreerrnovaleur.
Autres codes d'erreur associés
exceptEDOM,<errno.h>Il existe d'autres codes d'erreur liés aux fonctions mathématiques dans :
ERANGE: Le résultat est hors plage. Par exemple, calculerexp(1000)peut provoquer un dépassement de capacité, et entraîneraerrnoDéfini àERANGE。EILSEQ: séquence d'octets illégale. Lors du traitement de fonctions de caractères larges ou multioctets, les données d'entrée contiennent une séquence de caractères non valide.
En bref,EDOMest une macro importante pour gérer les erreurs de domaine des fonctions mathématiques, aidant les programmeurs à détecter et à traiter des paramètres d'entrée illégaux. En utilisant raisonnablementerrnoet ses macros associées, on peut écrire du code plus robuste et fiable.