Hallo in die Runde,
(Delphi 11.3)
vermutlich habe ich heute eine Fehler im 64-Bit-Delphi-Compiler gefunden. Gegeben sind zwei Preise, die in Currency-Variablen gespeichert werden. Die Differenz soll als Faktor dargestellt werden:
Code:
var
Value1 : Currency;
Value2 : Currency;
LFactor: Double;
begin
Value1 := 15;
Value2 := 12;
LFactor := Value1 / Value2;
ShowMessage(FloatToStr(LFactor));
end;
Compiliert für Windows 32 Bit kommt das
erwartete Ergebnis heraus:
1,25.
Compiliert für Windows 64 Bit hängt das Ergebnis davon ab, wie der Compilerschalter "EXCESSPRECISION" gesetzt ist:
{$EXCESSPRECISION ON} -> 1,25 (korrekt)
{$EXCESSPRECISION OFF} ->
1 (falsch)
Schaut man sich den erstellten Assembler-Code an, dann wird im Fehlerfall tatsächlich eine Integer-Division mittels "idiv" durchgeführt; ansonsten "call @CompDiv".
Bevor ich im Quality-Portal einen Bugreport aufmachen: Kann dieses Verhalten jemand von Euch mit älteren Delphi-Versionen (als 11.3) reproduzieren? Seit wann gibt es eigentlich den "EXCESSPRECISION"-Schalter?