Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#18

AW: Problem: 'ungültige Gleitkommaoperation'

  Alt 7. Mär 2012, 08:55
Nur mal mein Senf zu den Bemühungen der letzten Stunden. Irgendwo oben habe ich geschrieben, dass ich von der Einstellung her keine Überraschungen mag, was bedeutet, dass ich zuerst prüfe ob eine Text-Datei vorhanden ist und welche Größe sie hat, bevor ich sie dann ich einem Try-Except Block öffne. Ich hab mal bei einigen meiner Projekte eine Überprüfung gemacht und festgestellt, dass fast ein drittel des Programms aus Überprüfungen besteht. Nun zu dem hier:
Delphi-Quellcode:
 var a,b,c,d,f,g,h:real;
begin
 a:=strtofloat(edit1.text);
 b:=strtofloat(edit2.text);
 c:=strtofloat(edit3.text);
 g:= b/a/2;
 h:= g*g-c/a;
 if h<0 then
 ShowMessage('Nicht Lösbar (Wurzel 0)')
 else
  begin
    d:= -g+sqrt(h);
    f:= -g-sqrt(h);
    Edit4.Text:=FloattoStr(d);
    Edit5.Text:=Floattostr(f);
  end;
Selbst ich mit meinem übertriebenem Kontrollsinn würde irgendwann es gut sein lassen. Eine Formel ist nun mal eine Formel. Eine vorherigen Überprüfung macht nur dann einen Sinn, wenn man eingreifen kann. Wenn ich a/b nehmen, kann ich vorher prüfen ob b gleich 0 ist. Aber was bringt mir das? Nichts. Ich kann die Fehlermeldung abfangen, vielleicht kann ich dem Nutzer auch sagen, dass b gleich 0 ist, wenn er b direkt eingeben kann, aber welchen Sinn macht es bei a/(b-c) vorher zu überprüfen ob b - c = 0 ergibt? Auf was ich hinaus will ist: irgendwann sollte man eine Kosten/Nutzen Rechnung machen. Und hier wäre die Frage: welchen Nutzen hat es eine Formel in seine Bestandteile zu zerlegen? Hat er Einfluss auf h wenn es kleiner 0 ist? Macht er eine 1 draus? Nein, er sagt nur, dass die Formel nicht funktioniert. Und das sagt ihm das System auch. Es hat also keinen Nutzen die Formel zu zerfleischen. Man sollte es irgendwann gut sein lassen. Aber das ist nur mein Senf.

Entweder man ist ein Kontrollfreak und überprüft vorher jeden Teil der Formel, was aber nur Sinn macht wenn man es beeinflussen kann, was hier nicht der Fall ist, oder mal läßt die Formel Formel sein.

Irgendwann sollte mal lernen mit der Fehlermeldung des Systems zu leben.
Delphi-Quellcode:
 var a,b,c,d,f:real;
begin
 a:=strtofloat(edit1.text);
 b:=strtofloat(edit2.text);
 c:=strtofloat(edit3.text);
 try
   d:=((b/a)/2)+sqrt(((b/a)/2)*((b/a)/2)-c/a);
   Edit4.Text:=FloatToStr(d);
 except
   Edit4.Text:='Fehler in der Berechnung 1';
 end;
 try
   f:=((b/a)/2)-sqrt(((b/a)/2)*((b/a)/2)-c/a);
   Edit5.Text:=FloatToStr(f);
 except
   Edit5.Text:='Fehler in der Berechnung 2';
   //...
 end;
end;
Nur mal als Info an C0M3T, eine Fehlermeldung kommt hier nur in der IDE. Beim fertigen Programm sieht man nur die Meldung in den Editfeldern.
  Mit Zitat antworten Zitat