Delphi-PRAXiS

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??

Borti 5. Jan 2005 11:26

Re: Delphi rechnet falsch
 
ich hab jetzt ja die routine mit von mir gewählten Werten für Zahl1 und Zahl2 gefüttert. Bei manchen werten kommt glatt 1 raus, bei manchen 0,999...

supermuckl 5. Jan 2005 11:34

Re: Delphi rechnet falsch
 
ich denk mal das ist so zu erklären:
der realwert wird ja in binärer form irgendwo gespeichert.
und zwar nur eine zahl (7 ziffern) und - vorzeichen oder noch eine ziffer
und das halt binär.

nun rechnet der prozessor das aus und tut dir richtiger weise diese ungenaue zahl raushauen, da nirgends gespeichert war, das es eine periode war oder nicht.

also irgenwo muss es sowas sein ;)

hoffentlich kanns jemand beschreiben, der ahnung hat.

//edit
http://www.ica1.uni-stuttgart.de/Cou...ml/node39.html

Steve 5. Jan 2005 11:37

Re: Delphi rechnet falsch
 
Hi,

es liegt eher am Aufbau von Gleitkommazahlen (Vorzeichenbit, Mantisse, Exponent...). Hier gibts ne ziemlich ausführliche Beschreibung/Erläuterung.


Gruß
Stephan :dance:

Chegga 5. Jan 2005 11:37

Re: Delphi rechnet falsch
 
Hi,

Zitat:

hoffentlich kanns jemand beschreiben, der ahnung hat.
Ja, hoffentlich! :mrgreen:

MfG Marc

[Edit]Der Link von Steve ist sehr hilfreich! Und das wichtigste:
Die Erklärung ist einfach zu kapieren. (für mich! :wink: )[/Edit]

Sourcemaker 5. Jan 2005 11:38

Re: Delphi rechnet falsch
 
Hi,

wenn Du weißt das die Nachkommastellen auf <=4 begrenzt sind ist der Typ Currency zu empfehlen.

Grüße

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 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