Einzelnen Beitrag anzeigen

bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#12

AW: floating point invalid operation: 10.1 vs. 10.2

  Alt 29. Mär 2018, 08:37
Habe mal ein bischen rumprobiert:

Es sieht so aus, dass in 10.2 der Rückgabewert von SQR(AWord) kein Word, sondern ein Integer ist. Wenn der Rückgabewert ein Word wäre, könnte der Überlauf-Wert ja nicht negativ werden und es gäbe keine Exception beim SQRT.

Man kann das schön nachvollziehen, wenn man den Rückgabewert von SQR entsprechend castet:
Delphi-Quellcode:
var
  AWord: Word;
  ADouble: Double;
  temp :Integer; // <----
begin
  AWord := 64536;
  temp := SQR(AWord); // -130072000
  ADouble := SQRT(temp + temp); // floating point invalid operation
end;
Delphi-Quellcode:
var
  AWord: Word;
  ADouble: Double;
  temp :Word; // <----
begin
  AWord := 64536;
  temp := SQR(AWord); // 16960
  ADouble := SQRT(temp + temp); // 184,17
end;
So bekommst du auch deinen richtigen falschen Wert 184,17.

Anscheinend gibt D10.1 im Gegensatz zu 10.2 hier bei SQR gleich den Word-Wert 16960 zurück.
  Mit Zitat antworten Zitat