Einzelnen Beitrag anzeigen

ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#1

Präzision von Variants und Flieskommazahlen

  Alt 28. Jun 2010, 12:00
Delphi-Version: 2010
Hallo Zusammen,

Ich musste eben etwas schockiert festellen, dass Werte an Genauigkeit einbüssen, wenn sie von einem Extended einem Variant zugewiesen wird:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Msg: String;
  Precision: Extended;
  Original: Extended;
  Epsilon: Extended;
  E: Extended;
  V: Variant;

begin
  Original := 12345.6789;
  E := Original;
  V := E;
  E := V;

  if Original = E then
  begin
    Msg := 'Genau gleich.';
  end
  else
  begin
    Precision := 1e-20;
    while not SameValue(Original, E, Precision) do
      Precision := Precision * 10;

    Msg := 'Nicht gleich. Fehler bei ' + FloatToStr(Precision);
  end;

  ShowMessage(Msg);
end;
Was rauskommt ist: Nicht gleich. Fehler bei 1E-12

Das ist irgendwie alles andere als erfreulich - zumal ich ja noch nicht einmal damit gerechnet habe. Ist das etwas bekanntes? Kann man das irgendwie flicken?
  Mit Zitat antworten Zitat