Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi rechnet falsch (https://www.delphipraxis.net/37387-delphi-rechnet-falsch.html)

Borti 5. Jan 2005 11:08


Delphi rechnet falsch
 
Hallo!
mir ist grad ein sehr merkwürdiges Phänomen aufgefallen:

Code:
procedure TForm1.Button1Click(Sender: TObject);
var Ergebnis,Zahl1,Zahl2:real;
begin
 Zahl1:=0.575;
 Zahl2:=0.675;
 Ergebnis:=0.100/(Zahl2-Zahl1);
 panel1.Caption:=floattostr(Ergebnis);
end;
Ich hab die werte der Variabeln Zahl1 und zahl2 so gewählt, dass in diesem code-beispiel als ergebnis 1 rauskommen müsste. Das Panel zeigt aber 0.9999999..... an! wisst ihr, was der grund dafür sein könnte?
gruß,
Borti

Darty 5. Jan 2005 11:10

Re: Delphi rechnet falsch
 
Hast ein Intel Prozessor mit dem berühmten Pentium Rechen Fehler ? :mrgreen:

Ne das ist wirklich komisch :gruebel:

bttb930 5. Jan 2005 11:16

Re: Delphi rechnet falsch
 
das sind grundlagen: es liegt an der internen binärdarstellung der zahlen.

sollte man auf jeden fall wissen, wenn man programmierer ist.

deswegen vergleicht man zwei double-werte auch nie per (a=b) sondern immer (Abs(a-b) < eps).

supermuckl 5. Jan 2005 11:17

Re: Delphi rechnet falsch
 
hab bei dem code das selbe ergebnis

wenn ich als variablen aber statt single, extended verwende, kommt 1 raus

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Ergebnis,Zahl1,Zahl2:extended;
begin
Zahl1:=0.575;
Zahl2:=0.675;
Ergebnis:=0.100/(Zahl2-Zahl1);
label1.Caption:=floattostr(Ergebnis);
end;

Alex_ITA01 5. Jan 2005 11:17

Re: Delphi rechnet falsch
 
löse es so:

Delphi-Quellcode:
panel1.Caption := FloatToStrF(Ergebnis,ffFixed,15,0);
MFG Alex

Borti 5. Jan 2005 11:18

Re: Delphi rechnet falsch
 
ah! super! funktioniert!

Danke!

Nikolas 5. Jan 2005 11:19

Re: Delphi rechnet falsch
 
Zitat:

deswegen vergleicht man zwei double-werte auch nie per (a=b) sondern immer (Abs(a-b) < eps).
Und warum ist das so??? :oops:

Airblader 5. Jan 2005 11:20

Re: Delphi rechnet falsch
 
Solche ähnlichen Fehler kommen bei Excel oder so auch raus, hatten wir mal in der Schule.

An manchen Rechner gings, an manchen kam durch ein Rundungsfehler was falsches ;)

air
(obwohl alle rechner gleich sind :D )

supermuckl 5. Jan 2005 11:21

Re: Delphi rechnet falsch
 
Zitat:

deswegen vergleicht man zwei double-werte auch nie per (a=b) sondern immer (Abs(a-b) < eps).
genial.. wusste ich jetzt auch noch nicht, hab mir aber in der richtung schon was gedacht..

eps ist epsilon, womich ich jetzt nicht soviel anfangen kann, aber dein weg ist richtig und sollte wirklich in jedem anfängerhandbuch stehen :)

Chegga 5. Jan 2005 11:23

Re: Delphi rechnet falsch
 
Hi,

Zitat:

Ich hab die werte der Variabeln Zahl1 und zahl2 so gewählt, dass in diesem code-beispiel als ergebnis 1 rauskommen müsste. Das Panel zeigt aber 0.9999999..... an!
[Edit]Die vielen Punkte dienen dafür, dass _ über der 9 steht[/Edit]
. . . . . . . . . . . . . . . . . . . . . . . _
Mathematisch gesehen ist 0.9 (Periode),
das Gleiche wie 1.
Aber warum Delphi das so macht? :gruebel:
(Wenn es überhaupt an Delphi liegt! :wink: )

MfG Marc

P.S.: Die Lösung können wir jetzt, aber warum zeigt es Delphi so an??


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.
Seite 1 von 2  1 2      

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