Einzelnen Beitrag anzeigen

Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
110 Beiträge
 
Delphi 12 Athens
 
#1

Compiler-Fehler bei Currency-Division und EXCESSPRECISION ?

  Alt 12. Sep 2023, 15:25
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?
Achim
  Mit Zitat antworten Zitat