Thema: Delphi Rechenaufgabe

Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.057 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Rechenaufgabe

  Alt 17. Jul 2006, 03:31
Zitat von himitsu:
PS: ABS macht intern nichts anderes

Code:
function abs(x: TYP): TYP;
  begin
    [b]if x < 0 then
      result := -x[/b]
    else
      result := x;
  end;
@himitsu:
so ganz stimmt das nicht.
bei mir wird z.B. a:=Abs(a); so umgesetzt

bei Integerwerten
Delphi-Quellcode:
mov eax,[adresse a]
cdq // wenn a negativ dann sind in edx alle Bits=1, sonst alle=0
xor eax,edx
sub eax,edx
mov [adresse a], eax
bei realwerten, z.B. extended
Delphi-Quellcode:
fld tbyte ptr [adresse a]
fabs // setzt das Vorzeichenbit = 0
fstp tbyte ptr [adresses a]
Tja, warum schreibe ich das?!
weil ich gerade gestern das vermeintliche Problem hatte, daß ABS einen negativen Integerwert nicht in einen positiven Wert umwandelte.
Wenn nämlich eine Variable des Typs Integer ihren kleinstmöglichen Wert hat, also -2147483648 oder $8000000 dann gibt es keine korrespondierende positive Zahl und Abs() verändert den Wert nicht, er bleibt also negativ.
Hat ein bischen gedauert, bis ich begriffen hatte wo mein Denkfehler lag.
Bei eingeschalteter Überlaufprüfung gibts dann übrigens eine Fehlermeldung....
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat