Delphi rechnet falsch
Hallo!
mir ist grad ein sehr merkwürdiges Phänomen aufgefallen:
Code:
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?
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; gruß, Borti |
Re: Delphi rechnet falsch
Hast ein Intel Prozessor mit dem berühmten Pentium Rechen Fehler ? :mrgreen:
Ne das ist wirklich komisch :gruebel: |
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). |
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; |
Re: Delphi rechnet falsch
löse es so:
Delphi-Quellcode:
MFG Alex
panel1.Caption := FloatToStrF(Ergebnis,ffFixed,15,0);
|
Re: Delphi rechnet falsch
ah! super! funktioniert!
Danke! |
Re: Delphi rechnet falsch
Zitat:
|
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 ) |
Re: Delphi rechnet falsch
Zitat:
eps ist epsilon, womich ich jetzt nicht soviel anfangen kann, aber dein weg ist richtig und sollte wirklich in jedem anfängerhandbuch stehen :) |
Re: Delphi rechnet falsch
Hi,
Zitat:
. . . . . . . . . . . . . . . . . . . . . . . _ 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?? |
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...
|
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 |
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: |
Re: Delphi rechnet falsch
Hi,
Zitat:
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] |
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