| Autor |
Beitrag |
tahnee
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 19:10
hallo,
ich hab folgenden quelltext geschrieben:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| procedure TForm1.extremwerte; var xm1, xm2, y, y1,y2, p, q:extended; begin y2:=6*x3*xm1+2*x2; y:=x3*power(xm1,3)+x2*power(xm1,2)+x1*xm1+x0; y1:=x3*power(xm2,3)+x2*power(xm2,2)+x1*xm2+x0; p:=(2*x2)/(3*x3); p:=round(p*100)/100; q:=x1/(3*x3); q:=round(q*100)/100; if (p/2)*(p/2)-q=0 then begin xm1:=-(p/2);
if y2<0 then begin maxx_edt.text:=floattostrf(xm1,fffixed,10,3); maxy_edt.text:=floattostrf(y,fffixed,10,3); end else begin minx_edt.text:=floattostrf(xm1,fffixed,10,3); miny_edt.text:=floattostrf(y,fffixed,10,3); end; end else
if (p/2)*(p/2)-q<0 then begin minx_edt.text:=''; maxx_edt.text:=''; end else begin xm1:=-(p/2)+sqrt((p/2)*(p/2)-q); xm1:=round(xm1*100)/100; xm2:=-(p/2)-sqrt((p/2)*(p/2)-q); xm2:=round(xm2*100)/100; if y2<0 then begin maxx_edt.text:=floattostrf(xm1,fffixed,10,3); maxy_edt.text:=floattostrf(y,fffixed,10,3); minx_edt.text:=floattostrf(xm2,fffixed,10,3); miny_edt.text:=floattostrf(y1,fffixed,10,3); end else begin maxx_edt.text:=floattostrf(xm2,fffixed,10,3); maxy_edt.text:=floattostrf(y1,fffixed,10,3); minx_edt.text:=floattostrf(xm1,fffixed,10,3); miny_edt.text:=floattostrf(y,fffixed,10,3); end; end; end; |
Ich erhalte immer die Fehlermeldung ungültige Gleitkommaoperation.Habs schon mit runden probiert, aber das hat auch leider nicht funktioniert.Wäre wirklich toll, wenn mir jemand helfen könnte.Danke.
Moderiert von Kha: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.03.09 19:16
Hallo und  hier im Forum!
Deinen Quelltext solltest du hier in Delphi-Tags setzen, sonst kann man den nur schwer überblicken, das hat jetzt Kha für dich erledigt: Quelltext 1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG4d7b645c281c2c5ab26ab5a2fcb5b6ec}</span></span> |
Wo genau tritt der Fehler denn auf? Hast du es einmal mit einem Haltepunkt und debuggen versucht?
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Fr 27.03.09 19:17
tahnee hat folgendes geschrieben : | | Ich erhalte immer die Fehlermeldung ungültige Gleitkommaoperation. |
In welcher Zeile von dem (leicht verwirrenden  ) code bekommst du den Fehler?
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
tahnee 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 20:16
Der Debugger verweist nur auf die Procedure, auf keine bestimmte Zeile...
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 27.03.09 20:32
Hallo und  in der Entwickler-Ecke,
was mir so auffällt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var xm1, xm2, y, y1,y2, p, q:extended; begin y2 := 6*x3*xm1+2*x2; y := x3*power(xm1,3)+x2*power(xm1,2)+x1*xm1+x0; y1 := x3*power(xm2,3)+x2*power(xm2,2)+x1*xm2+x0; p:=(2*x2)/(3*x3); q:=x1/(3*x3); |
_________________ We are, we were and will not be.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.03.09 20:38
tahnee hat folgendes geschrieben : | | Der Debugger verweist nur auf die Procedure, auf keine bestimmte Zeile... |
Es geht nicht darum nach dem Fehler zu schauen wo du landest, sondern es geht darum vorher zu schauen wann er auftritt.
Setz einen Haltepunkt (F5) auf die erste Quelltextzeile in der Prozedur, dann führ das Programm aus (F9) und gehe dann zeilenweise durch das Programm, wenn Delphi beim Haltepunkt anhält (F8 ).
|
|
tahnee 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 20:40
x3 ist auf keinen Fall null.
Habe den Quelltext so umgeschrieben, dass y, y1 und y2 erst später ausgerechnet werden, wenn uach die Variablen xm1, xm2 berechnet werden.Kommt trotzdem die gleiche Fehlermeldung...
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 27.03.09 20:44
 im Forum!
Gausi hat ja bereits die wesentlichen Fehler aufgedeckt.
Bist du nun einmal, wie jaenicke beschrieben hat, durch den Quelltext gesteppt und hast die einzelnen Werte überprüft? Die Wurzeln werde auch niemals kleiner Null?
BTW: Ich persönlich finde deine Quelltext-Formatierung noch verbesserungswürdig...
|
|
tahnee 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 20:50
Ja, hab ich gemacht, hat dabei iweder aber nur die procedure an sich angezeigt.
x3 kann nicht null werden (somit keine Division durch null) und die Wurzeln überprüf ich ja vorher...
if (p/2)*(p/2)-q=0
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 27.03.09 20:53
tahnee hat folgendes geschrieben : | und die Wurzeln überprüf ich ja vorher...
if (p/2)*(p/2)-q=0 |
Ja, auf gleich Null, das ist auch legitim. Aber nicht darauf, ob sie negativ sind.
Edit: Seh gerade, stimmt nicht, was ich erzählt habe. Du überprüfst in der Tat doch.
Edit2: Wenn du den Haltepunkt hinter das erste begin setzt und anschließend mit F7 durchsteppst, wird der Compiler mit Sicherheit nicht wieder an den Anfang der Prozedur springen. 
|
|
tahnee 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 21:17
Springt zu end. und application.initialize oder zu dem Teil wo ich die Prozeudr
if x3<>0 then begin
horner();
extremwerte();
wendepunkt();
end;
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 27.03.09 21:23
1) Klick in die Zeile in der folgendes steht: y2:=6*x3*xm1+2*x2;
2) Drücke F5 (Breakpoint sollte links erscheinen)
3) Drücke F4 und rufe deine Prozedur auf (das Programm sollte nun bis zu dieser Zeile laufen und anschließend in den Debugmodus wechseln)
4) Steppe mit F7 solange durch die Prozdur bis du an der Fehlerstelle angekommen bist

|
|
tahnee 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 21:43
Der springt immer nur zu der Stelle an der ich die Prozedur aufrufe...
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 27.03.09 21:48
Hast du eine alte Delphiversion? Welche benutzt du? Dann kann ich das genau für die Version zeigen.
|
|
tahnee 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 27.03.09 21:51
|
|
|