genauigkeit von Fließkomma
-
Vielen Dank für die Antworten
Heißt das, dass wenn ich die Stellen der Fließkommazahlen beachte, ich mir keine Sorgen um Rundungsfehler machen muss?
Kann ich "infinity" irgendwie abfangen oder auf "infinity" prüfen?
Falls ich gar nicht weiterkomme: Gibt es eine Bibliothek mit einem Festkommadatentyp?
-
> Heißt das, dass wenn ich die Stellen der Fließkommazahlen beachte, ich mir keine Sorgen um Rundungsfehler machen muss?
sorry, versteh ich nicht. fliesskommazahlen haben binaerstellen und rundungsfehler kommen logischerweise immer mit rein.> Kann ich "infinity" irgendwie abfangen oder auf "infinity" prüfen?
ja, es gibt glaub ich ein signal(), dass SIGFPE heisst.> Falls ich gar nicht weiterkomme: Gibt es eine Bibliothek mit einem Festkommadatentyp?
GMP hat viel zu bieten
-
hab mich schlecht ausgedrückt.Ich meinte , dass dann bei einem Literal kein Nachkommaanteil abgeschnitten wird,der über die stelle hinausgeht... aber egal.
???GMP???
WO,WAS,WIE
-
zu deiner frage: probiers mal aus.
GMP
-
DANKE
-
Doch noch ne kleine Frage:
Das mit SIGFPE funktioniert gut.Reagiert es auf alle Fehler (over/underflow, div durch 0,wenn zahl zu NaN wird...)?
Denn bei pow(x,x) bekomme ich eine Fehlermeldung als MessageBox beim overflow und nicht das signal.
-
waerst du so nett, uns die fehlermeldung zu sagen, damit wir dir helfen koennen?
der konkrete (edit: und aufs minimum reduzierte) code waere auch noch von noeten, um dir zu helfen.
-
Fehlermeldung: pow: OVERFLOW error
#include <math.h> #include <iostream.h> #include <signal.h> #include <windows.h> void S(int a){cout<<"!!!!!!!!!!!!!!!";} int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow ) { signal(SIGFPE,S); long double a=9999999999,b=9999999999; // beispielsweise cout<<pow(a,b); }
S wird nicht ausgeführt
-
Naja, Signale sind so eine Sache. Normalerweise hilft die örtliche Compilerhilfe, wie man was spezifiziert. Seit C99 kannst Du dich auch mal bei fesetenv&Freunden umsehen.
[Übrigens darfst Du aus einem Signalhandler eh nur abort, _Exit und sowas aufrufen, alles andere endet in extrem seltsamen Verhalten {so lange der Handler nicht mit raise aufgerufen wurde}.]
-
da musst du compilerschalter setzen, um die meldung wegzubekommen.
ausserdem ist cout kein ansi c.
im uebrigen kann windows mit apifunktionen scheinbar keine long doubles anzeigen. d.h. du musst entweder doubles benutzen oder die ausgabe selber besorgen.