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.