Zwar bekomme ich bei dem nachstehenden Code keinen Floating Point Fehler mehr, dafür jetzt einen Integer-Überlauf.
Ich denke, du solltest
AWord zu einem
Cardinal machen. Das Quadrat eines
Word passt immer in einen
Cardinal, aber halt nicht immer in einen
Integer oder gar ein
Word. Da der Rückgabewert von
SQR den gleichen Typ hat wie das Argument, muss das Argument schon ein
Cardinal sein, bei dem das Hi-Word gleich 0 ist. Andernfalls bekommt man einen Integeroverflow.
Am sichersten fährst du, wenn
AWord gleich als
Double oder
Extended deklariert wird.
Delphi-Quellcode:
var
AWord: Double;
ADouble: Double;
begin
AWord := 64536;
ADouble := SQRT(SQR(AWord) + SQR(AWord));
end;
Du kannst es dem Compiler aber auch leichter machen und es gleich so schreiben:
Delphi-Quellcode:
AWord := 64536;
ADouble := SQRT(2)*AWord;