External SIGFPE

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DAduNgZ
Beiträge: 15
Registriert: Mo 23. Dez 2013, 13:40

External SIGFPE

Beitrag von DAduNgZ »

Hallo,

Ich habe angefangen ein Programm zu schreiben, welches mir für ein Polynow 7ten Grades eine Kurvendiskussion durchführt. An einem Schritt in der Newton-Methode zur Annäherung der Nullstellen scheitert das Programm doch.

Es kommt die Fehlermeldung EXTERNAL SIGPFE. Dabei wird die folgende Zeile markiert.

Code: Alles auswählen

xneu:= xalt - ((a*(xalt**7) + b*(xalt**6) + c*(xalt**5) + d*(xalt**4) + e*(xalt**3) + f*(xalt**2) + g*xalt + h)/(a2*(xalt**6) + b2*(xalt**5) + c2*(xalt**4) + d2*(xalt**3) + e2*(xalt**2) + f2*xalt + g));
xalt und xneu sind beide Variablen vom Typ Real.
Der erste Gedanke, der mir kam war, dass ich durch Null teilen würde, das habe ich aber meiner Meinung nach durch folgende Zeilen behoben:

Code: Alles auswählen

   if (x = 0) and (g = 0) then
   begin
      x:= 0.00001;
   end;
Die Math Unit ist auch eingebunden, sodass die Schreibweise ** für a^b kein Problem darstellen dürfte.


wahrscheinlich ist es wieder nur ein dummer Fehler :mrgreen:, aber ich bitte trotzdem um Hilfe.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: External SIGFPE

Beitrag von Michl »

Falls (a2..f2=0 oder xalt=0) und g=0 dann wird durch Null geteilt!

Warum machst Du nicht sowas wie

Code: Alles auswählen

  aTeiler:=(a2*(xalt**6) + b2*(xalt**5) + c2*(xalt**4) + d2*(xalt**3) + e2*(xalt**2) + f2*xalt + g);
  if aTeiler=0 then exit;  //oder aTeiler:=1; oder ...
  xneu:= xalt - ((a*(xalt**7) + b*(xalt**6) + c*(xalt**5) + d*(xalt**4) + e*(xalt**3) + f*(xalt**2) + g*xalt + h)/aTeiler); 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

DAduNgZ
Beiträge: 15
Registriert: Mo 23. Dez 2013, 13:40

Re: External SIGFPE

Beitrag von DAduNgZ »

Danke, so funktioniert es! :)

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: External SIGFPE

Beitrag von wp_xyz »

Aber denkst du auch an den Fall 0/0, der durchaus einen sinnvollen Wert haben kann, aber bei der Prüfung auf Nenner=0 unter den Tisch fällt?

DAduNgZ
Beiträge: 15
Registriert: Mo 23. Dez 2013, 13:40

Re: External SIGFPE

Beitrag von DAduNgZ »

Der Fall für Zähler 0 kommt nicht in diese Rechnung hinien. In dem Fall hätte ich bereits die Nullstelle gefunden und bräuchte kein Newton-Verfahren mehr verwenden.

Antworten