Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehler bei Grundrechenarten (https://www.delphipraxis.net/30750-fehler-bei-grundrechenarten.html)

BrinkschulteManfred 28. Sep 2004 20:48


Fehler bei Grundrechenarten
 
Hallo zusammen,


liegt es an einer längenmäßigen Begrenzung von Variablennamen, dass folgendes passiert?

Delphi-Quellcode:
  Menge := StrToInt(EditMenge.Text);         //=1
  Hoehe := StrToFloat(EditHoehe.Text);       //=0.5
  Breite := StrToFloat(EditBreite.Text);     //=2
  // Geometrie berechnen
  FlaecheSichtbarStueck := Hoehe * Breite;
  X:= FlaecheSichtbarStueck;
Alle Variablen sind vom Typ DOUBLE. Wenn FlaecheSichtbarStueck berechnet wird, kommt das richtige Ergebnis (1) heraus. Wird aber nun X zugewiesen, enthält anschließend X den Wert 1,7.....e-269. Woran liegt es? Mir fällt nur der lange Name der Variablen auf. Kann es daran liegen?

Gruß
Manfred

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

mirage228 28. Sep 2004 20:53

Re: Fehler bei Grundrechenarten
 
Hi,

das kann ich nicht bestätigen.

Mein Test-Code (Drei Edits und ein Button auf die Form)
Delphi-Quellcode:
var
  Menge, Hoehe, Breite, FlaecheSichtbarStueck, X: Double;
begin
  Menge := StrToInt(Edit1.Text); //=1
  Hoehe := StrToFloat(Edit2.Text); //=0,5
  Breite := StrToFloat(Edit3.Text); //=2
  // Geometrie berechnen
  FlaecheSichtbarStueck := Hoehe * Breite;
  X:= FlaecheSichtbarStueck;
  ShowMessageFmt('%f %f', [FlaecheSichtbarStueck, X]); // gibt "1,00 1,00" aus
Anzumerken ist, dass es bei mir mit einem Punkt als Dezimalseperator nicht geklappt hat ("0.5 ist kein gültiger Fließkommawert")

mfG
mirage228

Sanchez 28. Sep 2004 21:15

Re: Fehler bei Grundrechenarten
 
Hallo,

Ist es möglich, dass du den Wert von X nur im Debuger per Hint auswertest?
Vermutlich liefert dir der Compiler die Meldung "Auf 'X' zugewiesener Wert wird niemals benutzt".
Wenn du eine Variable zuweist, die du nachher nie mehr benutzt, wird das wegoptimiert und die Zuweisung findet eigentlich gar nie statt.

Wenn du das
Delphi-Quellcode:
ShowMessageFmt('%f %f', [FlaecheSichtbarStueck, X]);
anhängst sollte es auch bei dir stimmen.

grüße, daniel

maximus Caesar 28. Sep 2004 21:38

Re: Fehler bei Grundrechenarten
 
Zitat:

Alle Variablen sind vom Typ DOUBLE. Wenn FlaecheSichtbarStueck berechnet wird, kommt das richtige Ergebnis (1) heraus. Wird aber nun X zugewiesen, enthält anschließend X den Wert 1,7.....e-269. Woran liegt es? Mir fällt nur der lange Name der Variablen auf. Kann es daran liegen?
Das Problem hate ich auch schon öfter!
Ich mach eine Berechnung, und das Ergebnis ist vollkommen falsch!
Ich weiß nicht woran es lag, aber nach dem ich den ganzen Abschnitt nochmal neu geschrieben hatte, war der Fehler behoben!
(Ich hab Extended verwendet)

BrinkschulteManfred 29. Sep 2004 08:52

Re: Fehler bei Grundrechenarten
 
Herzlichen Dank,

ich habe tatsächlich nur den Hint im Debugger betrachtet und auch nicht berücksichtigt, dass der Code vom Compiler optimiert wird. Dann sieht das Ganze natürlich schon sehr viel besser aus!
Herzlichen Dank, jetzt kann ich mich dann anderen Problemen widmen.

Gruß
Manfred


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz