C-Programmierung: Exception bei Rechenergebnis NaN?

... komplette Frage anzeigen

2 Antworten

In C89 gibt es eine Funktion matherr(), die bei Fehlern in log(), sqrt() & Co. aufgerufen wird. Man kann diese Funktion selbst schreiben (und dort z.B. das Programm abbrechen).

C99 führt ein neues Konzept ein. Die entsprechenden Funktionen sind in fenv.h deklariert. Mit fesetexceptflag() aktiviert man die Behandlung verschiedener Fehlertypen (nur "invalid" und "divide-by-zero" sind per Voreinstellung aktiv).

Was Dein Compiler hier genau anbietet und was Du dabei beachten musst, steht in dessen Handbuch. Einfach man matherr oder man fenv eintippen (oder diese Begriffe im Internet suchen).

Viel Erfolg!

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Defaetist
16.06.2016, 08:11

Das probier ich gleich mal aus... Vielen Dank!!

0

Ich sehe das Problem mit isnan nicht. Es werden wohl kaum auf einmal alle Variablen auf NaN stehen, wenn es irgendwo anschlägt kann man doch problemlos in bzw. über dem Bereich ein paar mehr Abfragen einbauen und das Problem weiter eingrenzen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Defaetist
16.06.2016, 08:16

Das ist das Problem: Das Programm ist sehr umfangreich und es ist nicht ganz einfach, durch Breakpoints herauszufinden, wann das erste mal das NaN auftritt.

Ein Gleichungslöser ruft eine rechte Seite wiederholt auf und nach tausenden von Aufrufen werden auf einmal Variablen NaN. Ich habe das an mehreren Stellen probiert, da waren aber schon sehr viele Variablen NaN. Weitere ABfragen einzubauen wird wegen dem Umfang ziemlich uferlos.

Deshalb möchte ich eine Floating Point Exception, wenn das allererste mal ein NaN entsteht. Dann weiß ich sofort, in welcher Zeile das Problem ist.

Aber danke erstmal...

0