Autor Beitrag
Schorsch99
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 30.01.04 10:37 
Hi an Alle!

Folgendes Problem entsteht bei Rechenoperationen mit Variablen
vom Typ EXTENDED oder generell REAL, wenn diesen Variablen Bruchwerte zugeordnet werden: (Habe Delphi 6 Student Edition)

Kann mir irgendwer helfen? :roll:


Fall1:*************************************

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
a:extended;

begin
a:=-0.2;

if a=-0.2 then a:=1 else a:=2;
end;
end;


==> a=1 alles funktioniert richtig.


Fall2:*************************************

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
a:extended;

begin
a:=1-1.2;

if a=-0.2 then a:=1 else a:=2;
end;
end;


==> a=2 errechneter Wert a=1-1.2=-0.2 wird in der if-Bedingung nicht erkannt

Fall3:**************************************

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
a:extended;

begin
a:=1-1.2;

if a<-0.2 then a:=1 else a:=2;
end;
end;


===> a=1 errechneter Wert a=1-1.2=-0.2 erfüllt die if-Bedingung

*******************************************
Fazit: Beim Typ EXTENDED muss der errechnete Wert im Speicher kleiner sein als der im Quelltext angegebene
Frage: Wie kann man das beheben oder umgehen?

gruss, Georg

Moderiert von user profile iconKlabautermann: Verschoben & Delphi-Tags hinzugefügt.
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Fr 30.01.04 10:52 
ich würde meinen falsches Forum...

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 30.01.04 12:28 
Fall 2 bzw. generell vergleicht man Fließkommazahlen nicht mit "=", da die Werte im Speicher gerundet vorliegen, da sie hardware technisch nie genau abgebildet werden können.
KidPaddle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 351

WinXP,Linux
D7 Prof, XE7
BeitragVerfasst: Fr 30.01.04 14:26 
Fall2:
ausblenden Delphi-Quelltext
1:
if (abs(a - (-0.2)) < 0.00001then a:=1 else a:=2;					


Wobei 0.00001 eine Konstante ist, ab der ein Wert als 0 angesehen wird und die Grenze hängt von der Genauigkeit ab, mit der Du rechnen willst.

Gruß
KidPaddle