Um die Antwort von @TheOtherGuy zu erweitern, können Sie den Vorgang abbrechen, wenn ein Überlauf auftritt.
%Vor%Wenn ein Oferflow auftritt, wird errno auf ERANGE gesetzt.
Nächstes Mal, machen Sie Ihre Hausaufgaben, bevor Sie fragen.
Googeln: "c ++ exp" gab das als erstes Ergebnis Ссылка zurück
In der Mitte der Seite gibt es GENAU, was Sie suchen.
Für die Behandlung mit exp ():
Vergleichen Sie einfach mit einer Variablen, die Sie dem Protokoll (FLT_MAX) zuweisen. FLT_MAX ist der größte Float. Sie können dies vor tun, indem Sie ein exp () berechnen. Weil log () die Umkehrung von exp () ist.
%Vor%Für die Handhabung von log ():
1) Sie können log (x) vor dem Überlauf von x nicht ablaufen lassen. (für die obere Grenze)
2) Die Genauigkeit von Float's / Double's (x) reicht nicht aus, um für log (x) in Negativ-Unendlich zu fließen.
3) Stellen Sie sicher, dass x größer als Null ist.
Der beste Weg, um im Vorfeld auf Überlauf zu prüfen, ist es, dies von Fall zu Fall intelligent zu tun.
Mit Ihrem Wissen über Logarithmen und Exponenten sollten Sie in der Lage sein, potentielle Überläufe mithilfe von Eigenschaften wie INT_MAX
zu erkennen: Sehen Sie sich diese C ++ an Einschränkungen
Ich habe eine grobe Beispiel-C ++ - Ausführung zusammengestellt, vorausgesetzt, Sie wissen vorher, welche Grenzen Sie verfolgen.
%Vor%Wenn Sie versuchen, die Fehler post mortem zu erkennen, überprüfen Sie errno in range .
Tags und Links c c++ undefined-behavior