Over- und Underflow erkennen...?
-
Du könntest das Ergebnis im nächstgrößeren Datentyp speichern. Oder mit inline-Assembler das Carry-Flag überprüfen.
Beide Möglichkeiten sind leider nicht portabel.
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Themen rund um Offtopic in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
@Optimizer: Es kann nach '+' * '+' genauso wieder + rauskommen, obwohl bereits eine Runde mehr gedreht wurde oder?
MfG SideWinder
-
Stimmt, bei '*' funktioniert es nicht. Überhaupt funktioniert auch das Überladen der Operatoren nicht. Es war halt schon spät.
-
Und ich sehe bei complex<long double> leider auch nicht einen nächst-größeren Typen.
Es lässt sich da wirklich nichts machen? Wie machen das dann die besseren Rechner, die geben dann doch auch nichts Falsches aus, sondern melden, dass die Zahl zu groß ist.MfG Eisflamme
-
Bei double musst du doch auf infinity prüfen, das läuft nicht einfach so über.
Wie machen das dann die besseren Rechner, die geben dann doch auch nichts Falsches aus, sondern melden, dass die Zahl zu groß ist.
Dein Prozessor weiss das auch, dazu musst du halt ein spezielles Register abfragen.
-
Inwiefern ist das nicht kompatibel?
-
Kompatibel? Protabel? Was meinst du?
Das Register abfragen erfordert AFAIK, dass du das in Assembler h4xX0r5t.
Das betrifft jetzt aber nicht die Fließkommazahlen.
Bei denen musst du nur nach jeder Operation das Ergebnis mit dem Wert für POSITIVE_INFINITY und NEGATIVE_INFINITY (so heissts bei Java) vergleichen. Allerdings frage ich mich echt, wie du einen long double zum Überlaufen kriegst?! Da geht doch ne 300stellige Zahl rein, oder?
-
Hi,
na ja, ich arbeite nur mit Fließkommazahlen, allerdings gibt es da auch diverse Rechenfehler, die ich mir gerade nicht erklären kann (keine Ungenauigkeit), ich werde diesbezüglich noch etwas testen.
Und bei Fließkommazahlen kann man pauschal nicht sagen, wie viele Stellen eine Zahl hat, weil solche Variablen allgemein anders aufgebaut sind.Nagut, vielleicht ergibt sich dadurch sogar mehr, bei VC6.0 habe ich jetzt das Problem, dass ich nur 80 Bit für long double habe...
MfG Eisflamme
-
Das ist mir schon klar, dass die Genauigkeit abnimmt. Aber du hast von Overflow gesprochen und das hat mich halt gewundert.
-
Ja, stimmt.