Delphi-PRAXiS
Seite 5 von 6   « Erste     345 6      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Function für Vorzeichen? (https://www.delphipraxis.net/76719-function-fuer-vorzeichen.html)

3_of_8 8. Sep 2006 22:15

Re: Function für Vorzeichen?
 
Da dürfte Hawkeyes Lösung noch schneller sein.

Dax 8. Sep 2006 22:18

Re: Function für Vorzeichen?
 
Das ist natürlich möglich. Immerhin braucht Hawks Lösung Pointerberechnung und -inderektion, aber dafür Fließkommavergleiche. Ich weiß nicht aus Erfahrung, was da genau schneller ist - mag das jemand testen? :)

Michael Habbe 8. Sep 2006 22:30

Re: Function für Vorzeichen?
 
Wow, so eine kleine Funktion verursacht so viel geshcreibsel.

Warum schreibt denn nun keiner wie die Funktion richtig aussehen muss?

Delphi-Quellcode:
function Sign(Value: Real): Integer;
begin
  if Value <= 0 then
    result := -1
  else
    result := 1;
end;
Wieviel Millisekunden ist dieses "IF" denn langsamer? Oder anders ausgedrückt: Wie oft muss Cöster diese Funktion hintereinander aufrufen, um eine Verzögerung festzustellen? :gruebel:

Cöster 8. Sep 2006 22:31

Re: Function für Vorzeichen?
 
Zitat:

Zitat von Hawkeye219
Ich hatte im Beitrag #15 eine mögliche Lösung vorgestellt (für Integer- und Double-Werte

Joa, die Lösung gefällt mir am Besten. Mir war erst nicht klar, was sie der If-Lösung gegenüber für Vorteile hat, deswegen hatte ich sie wohl mehr oder weniger überlesen und mir nachher nicht mehr die Mühe gemacht, zurückzublättern.
Danke!

3_of_8 8. Sep 2006 22:31

Re: Function für Vorzeichen?
 
Halt, ich hab mir deins nochmal angeschaut - das dürfte tatsächlich noch schneller sein.

Deine Lösung funktioniert bei mir nicht. Little Endian Format? Und ich würde es so machen:

Delphi-Quellcode:
function Sign(e: Extended): Integer;
begin
  result:=0-(PByte(Integer(@e)+9)^ shr 7) or 1;
end;

Christian Seehase 8. Sep 2006 22:37

Re: Function für Vorzeichen?
 
Moin Dax,

wozu die Pointer?

Delphi-Quellcode:
function Sign(const AValue : double) : integer;

type
  TSignHelp = record
    case boolean of
      true : (dblValue : double);
      false : (abDummy : array [1..7] of Byte;
               bValue  : Byte;);
  end;

begin
  Result := (0 - (TSignHelp(AValue).bValue) shr 7) or 1;
end;
funktioniert jedenfalls.

Dax 8. Sep 2006 22:42

Re: Function für Vorzeichen?
 
Zitat:

Zitat von Christian Seehase
Moin Dax,

wozu die Pointer?

Zur Verwirrung der geneigten Leser :zwinker:

Ne, hab einfach vergessen, das es anders auch geht :duck:

3_of_8 8. Sep 2006 23:11

Re: Function für Vorzeichen?
 
Meins geht auch ohne großartige Typendeklarationen. :P

uligerhardt 9. Sep 2006 11:18

Re: Function für Vorzeichen?
 
Zitat:

Zitat von Cöster
Ich brauch den Befehl "hänge an a das Vorzeichen von b dran" und dafür schreib ich dann
a := sign(b)*a;

Wie wäre es dann einfach mit
Delphi-Quellcode:
if b < 0 then a := -a;
und fertig?

Uli.

3_of_8 9. Sep 2006 14:01

Re: Function für Vorzeichen?
 
Das geht schneller:

Delphi-Quellcode:
function signmultiply(const a, b: Extended): Extended;
begin
  result:=a;
  PByte(Integer(@result)+9)^:=PByte(Integer(@result)+9)^ xor
    (PByte(Integer(@b)+9)^ and (1 shl 7));
end;
c:=signmultiply(a, b) macht in etwa das: if b<0 then c:=-a else c:=a;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.
Seite 5 von 6   « Erste     345 6      

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