Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Vorzeichen entfernen (https://www.delphipraxis.net/98607-vorzeichen-entfernen.html)

Flo.Hoe 29. Aug 2007 20:37


Vorzeichen entfernen
 
Hi,

Bis jetzt habe ich zum berechnen des Betrages immer folgenden Code benutzt:
Delphi-Quellcode:
Zahl:=sqrt(Zahl*Zahl)
Ich schätze, dass es eine Geschicktere Lösung geben wird.
Welche könnte das sein?

mkinzler 29. Aug 2007 20:38

Re: Vorzeichen entfernen
 
ABS()

Phoenix 29. Aug 2007 20:38

Re: Vorzeichen entfernen
 
Delphi-Quellcode:
absoluterwert := Abs(-5);
Achja: Uses System.

Edit Nachtrag: Ich komm mir heute langsam vor...

Flo.Hoe 29. Aug 2007 20:41

Re: Vorzeichen entfernen
 
Danke. Genau danach hab ich gesucht.

3_of_8 29. Aug 2007 21:17

Re: Vorzeichen entfernen
 
uses System? O_o

Phoenix, war das ironisch gemeint? Wenn nein, System ist IMMER eingebunden.

Phoenix 29. Aug 2007 21:24

Re: Vorzeichen entfernen
 
Ich bin heut einfach nicht mehr ganz wach... :roteyes:

hathor 29. Aug 2007 21:25

Re: Vorzeichen entfernen
 
Ich auch.
Ich bin heut einfach nicht mehr ganz wach... Rotating Eyes

SirThornberry 29. Aug 2007 21:48

Re: Vorzeichen entfernen
 
die wurzel ziehen ist nicht umbedingt das beste für die cpu. ohne abs wäre eine Lösung zu schauen ob die Zahl < 0 ist und wenn dem der fall ist * -1 zu rechnen. bzw. einfach das minus vorranstellen (denn - + - ergibt +)
Delphi-Quellcode:
if zahl < 0 then
  zahl := -zahl;

3_of_8 29. Aug 2007 22:06

Re: Vorzeichen entfernen
 
...wobei abs() um einiges schneller ist. Wenn der Compiler es inlinet (was er vermutlich tun wird), braucht es sogar nur 3 Assemblerbefehle (bei Integern, bei Float wäre es ein FPU-Befehl), und zwar ein cdq, ein xor und ein sub. Ein if und eine Subtraktion sind dadurch langsamer.

_frank_ 29. Aug 2007 22:06

Re: Vorzeichen entfernen
 
Zitat:

Zitat von SirThornberry
(denn - + - ergibt +)

achso? wusste ich noch gar nicht :)

kannte das nur als
- * - = +

da würde ja
-5 + -2

+7 ergeben, richtig? oder vielleicht +3... :gruebel:

das minus voranstellen macht ja auch ne multiplikation
sicher nur ein schreibfehler, aber wollte das nicht so stehen lassen...

ein etwas exotischer weg wäre sicher auch, das höchstwertige Bit auf 0 zu setzen :)

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz