Einzelnen Beitrag anzeigen

itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#1

Berechnungen mit Gleitkomma Werten

  Alt 16. Feb 2024, 10:18
Delphi-Version: 11 Alexandria
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.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat