Autor Beitrag
delphiprogrammierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Fr 18.09.09 08:27 
Hallo,

ich benutze bei einem Kundenprojekt Delphi 7 und vergleiche zwei Float werte aus der Datenbank.
Bei folgendem Beispiel kommen unterschiedliche Ergebnisse raus :

Extended E := 1 / 100; // 0,01
Double D := 1 / 100; // 0,0100000000000000002

Hat das einen bestimmten Grund ?


Danke
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 18.09.09 08:51 
Das sind die üblichen Ungenauigkeiten bei Gleitkommatypen. Im Binärsystem kann man Werte wie "0,1" halt nicht exakt abbilden (probier mal durch aufsummieren von 1/2, 1/4, 1/8, etc. auf 1/10 zu kommen. ;-)). Float-Typen sollte man daher nie mit "=" überprüfen, sondern mit entsprechenden Funktionen wie IsZero oder IsEqual. Die überprüfen die Gleichheit abzüglich einer gewissen Toleranz, die durch das System vorgegeben ist.

_________________
We are, we were and will not be.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.09.09 14:19 
Hier gibt es eine genaue Begründung: www.michael-puff.de/...el/Fliesskomma.shtml
delphiprogrammierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53



BeitragVerfasst: Fr 18.09.09 15:15 
erfahrene Programmierer wissen sollten :oops: