C-Bibliotheksmakro -EDOM
C-Standardbibliothek - <errno.h>
Beschreibung
C-BibliotheksmakroEDOMGibt einen Domänenfehler an, der auftritt, wenn ein Eingabeargument den durch die mathematische Funktion definierten Definitionsbereich verlässt und errno auf EDOM gesetzt wird.
EDOMEs ist ein Makro in der C-Standardbibliothek, definiert in<errno.h>der Header-Datei. Es wird verwendet, um einen Domänenfehler bei einem Argument einer mathematischen Funktion darzustellen, das heißt, das Funktionsargument geht über den mathematischen Definitionsbereich hinaus. Dies tritt normalerweise bei mathematischen Bibliotheksfunktionen auf (wiesqrt、log、asinWenn (etc.) ungültige Eingabeparameter empfängt.
Deklaration
Das Folgende ist eine Verwendung vonEDOMein Beispiel, das zeigt, wie Domänenfehler bei Argumenten mathematischer Funktionen behandelt werden:
#define EDOM some_value
Parameter
- N/V
Rückgabewert
- N/V
Beispiel
Das folgende Beispiel demonstriert die Verwendung des EDOM-Makros.
Beispiel
#include <math.h>
#include <errno.h>
int main() {
double x = -1.0;
double result;
// Vorherigen Fehler löschen
errno = 0;
// sqrt-Funktion aufrufen; die Übergabe eines negativen Werts verursacht einen Domänenfehler
result = sqrt(x);
if (errno == EDOM) {
printf("Fehler: sqrt() Domänenfehler, Eingabewert ist %f\n", x);
} else {
printf("Die Quadratwurzel von %f ist %f\n", x, result);
}
return 0;
}
Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:
The square root of -1.000000 is nan
In diesem Beispiel:
- Wir versuchen, die Quadratwurzel aus -1 zu berechnen, was eine Operation außerhalb des Definitionsbereichs ist, da negative Zahlen keine reelle Quadratwurzel haben.
sqrtDie Funktion wird diesen Domänenfehler erkennen und wirderrnoSetzen aufEDOM。- Wir prüfen
errnoder Wert von, wenn erEDOM, dann geben Sie die entsprechende Fehlermeldung aus.
zugehörige mathematische Funktionen
Die folgenden sind einige, die setzen könnenerrnoistEDOMmathematische Funktionen:
sqrt(x): wannx < 0Wenn ..., wird es setzenerrnoistEDOM。log(x): wannx <= 0Wenn ..., wird es setzenerrnoistEDOM。asin(x)undacos(x): wannxWenn es nicht im Bereich [-1, 1] liegt, wird es setzenerrnoistEDOM。pow(x, y): wannx < 0undyWenn es keine ganze Zahl ist, wird es setzenerrnoistEDOM。
Hinweise zur Verwendung
- Prüfen Sie den Rückgabewert: Nach dem Aufruf einer mathematischen Funktion, die einen Domänenfehler erzeugen kann, sollten Sie den Rückgabewert prüfen, und wenn die Funktion einen speziellen Wert zurückgibt (wie z. B.
NaN) beim Prüfenerrno。 - Initialisieren
errno: Bevor Sie die Funktion aufrufen, sollten Sieerrnoauf 0 setzen, um sicherzustellen, dass der Fehlercode durch diesen Aufruf erzeugt wird und nicht von einem vorherigen Aufruf übrig geblieben ist. - Thread-Sicherheit: in Multithread-Programmen,
errnonormalerweise als Thread-lokaler Speicher (TLS) implementiert, wodurch sichergestellt wird, dass jeder Thread seinen eigenenerrnoWert.
Weitere zugehörige Fehlercodes
exceptEDOM,<errno.h>Es gibt weitere Fehlercodes im Zusammenhang mit mathematischen Funktionen in:
ERANGE: Das Ergebnis liegt außerhalb des gültigen Bereichs. Zum Beispiel kann die Berechnung vonexp(1000)einen Überlauf verursachen und wirderrnoSetzen aufERANGE。EILSEQ: Ungültige Bytefolge. Beim Umgang mit Breitzeichen- oder Multibyte-Zeichenfunktionen enthalten die Eingabedaten eine ungültige Zeichensequenz.
Kurz gesagt,EDOMist ein wichtiges Makro zur Behandlung von Definitionsbereichsfehlern mathematischer Funktionen und hilft Programmierern, ungültige Eingabeparameter zu erkennen und zu behandeln. Durch die sinnvolle Verwendung vonerrnound seinen zugehörigen Makros kann man robusteren und zuverlässigeren Code schreiben.