Hallo,
hier ist noch eine Assembler-Version:
Delphi-Quellcode:
function Sign2 (aValue: Integer): Integer;
asm
sar eax,31
or eax,1
end;
Die folgenden PASCAL-Versionen haben den Vorteil, daß man sie im
BDS mit der INLINE-Direktive versehen kann. In zeitkritischen Routinen kann man damit einen zusätzlichen Geschwindigkeitsvorteil erzielen:
Delphi-Quellcode:
function SignInt (aValue: Integer): Integer;
{nur für BDS: inline;}
const
cSign:
array [Boolean]
of Integer = (-1, +1);
begin
Result := cSign[aValue >= 0];
end;
function SignFloat (aValue: Double): Integer;
{nur für BDS: inline;}
const
cSign:
array [Boolean]
of Integer = (-1, +1);
begin
Result := cSign[aValue >= 0];
end;
Gruß Hawkeye