Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - 1 / 100 = 0,0100000000000000002


delphiprogrammierer - Fr 18.09.09 08:27
Titel: 1 / 100 = 0,0100000000000000002
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 - 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.


Delete - Fr 18.09.09 14:19

Hier gibt es eine genaue Begründung: http://www.michael-puff.de/Artikel/Fliesskomma.shtml


delphiprogrammierer - Fr 18.09.09 15:15

erfahrene Programmierer wissen sollten :oops: