![]() |
Re: Function für Vorzeichen?
Da dürfte Hawkeyes Lösung noch schneller sein.
|
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? :)
|
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:
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:
function Sign(Value: Real): Integer;
begin if Value <= 0 then result := -1 else result := 1; end; |
Re: Function für Vorzeichen?
Zitat:
Danke! |
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; |
Re: Function für Vorzeichen?
Moin Dax,
wozu die Pointer?
Delphi-Quellcode:
funktioniert jedenfalls.
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; |
Re: Function für Vorzeichen?
Zitat:
Ne, hab einfach vergessen, das es anders auch geht :duck: |
Re: Function für Vorzeichen?
Meins geht auch ohne großartige Typendeklarationen. :P
|
Re: Function für Vorzeichen?
Zitat:
Delphi-Quellcode:
und fertig?
if b < 0 then a := -a;
Uli. |
Re: Function für Vorzeichen?
Das geht schneller:
Delphi-Quellcode:
c:=signmultiply(a, b) macht in etwa das: if b<0 then c:=-a else c:=a;
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr. |
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