Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Fließkommazahlfehler abfangen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.11.2005, 20:56 Uhr
~er
Gast


Kann man bei Fließkommazahlen irgendwie überprüfen ob sie zu inf oder zu NaN geworden sind oder einen overflow abfangen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.11.2005, 03:58 Uhr
0xdeadbeef
Gott
(Operator)


Kommt drauf an. Auf Systemen, die BSD 4.3 unterstützen (Also Linux, alle neueren BSDs und vermutlich auch die meisten neueren sonstigen Unices, ob Windows das kennt, weiß ich nicht), definiert math.h die Funktionen

C++:
int isinf(double value);
int isnan(double value);
int finite(double value);


Ich geb dir am besten einfach mal die manpage:

Code:
ISINF(3)                                                                                  Bibliotheksfunktionen                                                                                  ISINF(3)

BEZEICHNUNG
       isinf, isnan, finite - teste auf Unendlichkeit oder "keine Zahl" (not-a-number, NaN)

ÜBERSICHT
       #include <math.h>

       int isinf(double value);

       int isnan(double value);

       int finite(double value);

DESCRIPTION
       Die Funktion isinf() gibt -1 zurück wenn value negative Unendlichkeit repräsentiert, 1 wenn value positive Unendlichkeit repräsentiert, und ansonsten 0.

       Die Funktion isnan() gibt einen nicht-Null-Wert zurück wenn value keine Zahl ist (NaN), ansonsten 0.

       Die Funktion finite() gibt einen nicht-Null-Wert zurück wenn value endlich ist oder keine ist (NaN), ansonsten 0.

KONFORM ZU
       BSD 4.3

GNU


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.11.2005, 08:44 Uhr
Sponge



Moin,
ja Windows kennt diese Funktion finite und is nan auch.
Um wirklich alle Fehler abzufangen, kannst du aber auch das Signal SIGFPE (Gleitkommazahlfehler) abfangen. Mit dem Signal kannst du z.B. einen Overflow abfangen oder auch eine Division durch 0.
--
Es gibt 10 Arten von Leuten:
die, die das binäre System verstanden haben,
und die, die es nicht verstanden haben ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.11.2005, 15:35 Uhr
~er
Gast


Danke erstmals

finite(x) klappt gut aber wenn ich bei pow(x,x) einen Überlauf verursache, dann gibt mein Programm eine Fehlermeldung in Form einer MessageBox aus. Ich würde den Overflow aber lieber selber abfangen, aber die MessageBox kommt bevor ich mit finite(x) nachprüfen könnte.
Deshalb hab ich eine Funktion geschrieben, die auf SIGFPE reagiert. Das klappt bei DIV durch 0 aber nicht bei pow(x,x).

Falls ich gar nicht weiterkomme : Ist es vielleicht einfacher mit InlineAssembler zu arbeiten, und die FPU direkt anzusprechen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: