Hallo Liebe Community,
ich habe mir in einer Klassifizierung von Farbwerten ein Dictionary angelegt um diverse Werte schneller ermitteln zu können, dabei bin ich über ein Problem mit Gleitkomma Werten gestolpert.
Bei der Addition von Gleitkomma Werten der unterschiedlichen Typen(Single, Double, Real) scheint es zu einem Fehler kommen. Um diesen zu verifizieren habe ich mir ein kleines Test Programm geschrieben, dieses beinhaltet den folgenden Code.
Delphi-Quellcode:
program FloatTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.Classes, System.SysUtils;
var
AExtended: Extended;
AReal: Real;
ADouble: Double;
ASingle: Single;
i: Integer;
begin
try
AList := TStringList.Create;
AExtended := -1.0;
ADouble := AExtended;
ASingle := ADouble;
ASingle := -1.0;
AReal := AExtended;
for i := 0
to 200
do begin
AExtended := AExtended + 0.01;
ADouble := ADouble + 0.01;
ASingle := ASingle + 0.01;
AReal := AReal + 0.01;
end;
i := 0;
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
end.
Im Debug Fenster werden bei dieser Operation abweichende zwischen Werte angezeigt.
Bsp.:
Name des Ausdrucks Wert
AExtended -0,42
ASingle -0,420000553131104
ADouble -0,419999999999999
AReal -0,419999999999999
Beim Single Wert ist das Ganze ständig verschoben und schon bei der Wert Zuweisung von Double zu Single verändern sich die Nachkommastellen.
Für mich stellt sich jetzt die Frage ob dies ein generelles Delphi Problem ist oder ob dies vllt. an meiner Umgebung liegt.
Dieser Zustand tritt im 64-Bit sowie in 32-Bit Windows 11 Umgebungen auf.