Schwebende Punktenahme C ++ Warum und was ist es?

Schwebende Punktenahme C ++ Warum und was ist es?
Schwebende Punktausnahme tritt auf, wenn eine Software versucht, einen unsachgemäßen Betrieb auf einer numerischen Nummer auszuführen. Diese Art von Ausnahme tritt auf, wenn ein Benutzer versucht, ungültige Vorgänge wie Division nach Null auszuführen, die Aufteilung einer negativen Zahl durch eine gleichmäßige Zahl, die Quadratwurzel einer negativen Zahl oder Überlauf einer Berechnung, die die Grenze der Grenze überschreitet Doppeldatentyp.

In C ++ die "Sigfpe" Signalhandler verarbeitet das schwimmende Punktausnahmen (FPES). Wenn ein Benutzer versucht, die genannten Aufgaben auszuführen, wird dieser Signalhandler aufgerufen. Sobald der Signalhandler eingegriffen hat, druckt er eine Fehlermeldung zur Standardausgabe und hält das Programm an.

Warum treten schwimmende Ausnahmen auf?

Schwimmende Punktausnahmen kann aufgrund von Programmierfehlern auftreten oder wenn ein Programm versucht, einen Wert zu verarbeiten. Zum Beispiel, wenn ein Programm versucht, eine Ganzzahl durch Null zu teilen, oder wenn ein Programm versucht, die Quadratwurzel einer negativen Zahl zu übernehmen, a schwebende Punktausnahme wird passieren. Darüber hinaus einige schwimmende Punktausnahmen kann aufgrund von Prozessorfehlzählungen auftreten.

Viele Faktoren wie unangemessener Betrieb, Unterströmung, Überlauf, Division nach Null und Genauigkeit können zu einem führen schwebende Punktausnahme. Wir werden diese Argumente einzeln in diesem Abschnitt abdecken.

1: illegale Operation

Wenn ein Benutzer vergisst, eine Operation auszudrücken oder der Vorgang keinen mathematischen Wert hat, kann das Programm aufgrund einer ungültigen Operation nicht ausgeführt werden. Dies umfasst beispielsweise Berechnungen wie die Quadratwurzel und den Logarithmus negativer Zahlen. Obwohl es möglich ist, beim Umgang mit komplexen Zahlen die Quadratwurzel einer negativen Zahl zu übernehmen, gibt es keinen computergestützten Mechanismus, um dies auszudrücken.

Darüber hinaus führt ein falscher Betrieb, wenn eine Software a ausführt Schwimmpunkt Betrieb an einem ganzzahligen Standort nur. Dies ist auf ein Missverhältnis zwischen dem Betrieb zurückzuführen, den Sie versuchen, die Daten (Gleitkommaoperation) und die gespeicherten Daten (Ganzzahl) auszusetzen (Ganzzahl).

2: Zero Division

A schwebende Punktausnahme wird geworfen, wenn Sie versuchen, eine Ganzzahl durch Null zu teilen. Das gleiche tritt auf, wenn Sie versuchen, sich durch Nan oder Unendlichkeit zu teilen. Hier sind einige Beispiele: 1/0, log (0).

3: Überlauf

Wenn eine Operation einen Wert zurückgibt, der außerhalb des erwarteten Bereichs liegt, tritt eine Überlaufausnahme auf. Der Wert ist nach dieser Erklärung entweder mehr oder niedriger als der kleinste darstellbare Wert.

4: Unterlauf

Der Unterfluss tritt auf, wenn eine Berechnung ein Ergebnis ergibt, das geringer ist als ein Datentyp.

5: ungenau

Wenn sich das Ergebnis einer Operation von dem unterscheidet, was erwartet wurde, wird dies als ungenaue Ausnahme bezeichnet. Wenn der Vorgang mit ungebundener Präzision und einem Exponentenbereich durchgeführt wird, tritt dies auf.

In einigen Fällen können solche Situationen anmutig behandelt werden. Wenn beispielsweise ein Programm versucht, eine Zahl durch Null zu trennen, ist es im Allgemeinen vorzuziehen, eine Fehlermeldung zurückzugeben und das Programm anmutig zu beenden, anstatt das Programm zum Absturz zuzulassen.

#enthalten
#enthalten
Verwenden von Namespace STD;
Float Div (Float num, Float Den)

if (Den == 0)
Throw Runtime_error ("Mathematikfehler: Versuch, durch 0 \ n") zu teilen);

return (num / den);

int main ()

float num, Denom, Ergebnis;
Num = 10;
Denom = 0;
versuchen
Ergebnis = div (num, Denom);
Cout << "The quotient is " << result << endl;

catch (runtime_error & e)
Cout << "Exception occurred" << endl << e.what();

In diesem Code die Div Die Funktion wird durch den Try -Block im Inneren von aufgerufen hauptsächlich. Wenn der Denom ist ungleich zu null, Die Div Funktion gibt den Quotienten zurück; Wenn ja, a Ausnahme von Laufzeitfehler ist geworfen. Bevor Sie die Funktion der Rennzeit -Fehlerobjekt E aufrufen, fängt der Catch -Block diese Ausnahme ab und druckt den Text aus "Ein Fehler ist aufgetreten". Es wird verwendet, um die Ausnahme zu identifizieren. Die Klassenstandardausnahme, die in der beschrieben wird stdexcept Header -Datei hat eine virtuelle Funktion namens Was(). Die Nachricht "Mathematischer Fehler: Versucht, durch 0 zu teilen" wird als Ergebnis gedruckt.

Ausgang

Verhindern schwimmende Punktausnahmen In C ++ ist es wichtig, alle an Funktionen übergebenen Parameter zu überprüfen, geeignete Formate zu verwenden und Divisors explizit auf Nullwerte zu testen. Bei Verwendung von Doppel -Datentypen ist es außerdem wichtig, den Bereich des Datentyps zu vergrößern, wenn das Programm größere arithmetische Ergebnisse benötigt.

Abschluss

Schwimmende Punktausnahmen In C ++ werden durch ungültige Operationen zu numerischen Werten verursacht und kann die Fähigkeit des Programms zur korrekten Ausführung beeinflussen. Um solche Fehler zu vermeiden, ist es wichtig, alle an Funktionen übergebenen Parameter zu überprüfen und die entsprechenden Datentypen zu verwenden. Darüber hinaus ist es vorteilhaft zu fangen schwimmende Punktausnahmen.