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?