AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Function für Vorzeichen?

Ein Thema von Cöster · begonnen am 8. Sep 2006 · letzter Beitrag vom 10. Sep 2006
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#41

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:15
Da dürfte Hawkeyes Lösung noch schneller sein.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#42

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:18
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?
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#43

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:30
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?
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#44

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:31
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!
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#45

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:31
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;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.107 Beiträge
 
Delphi 11 Alexandria
 
#46

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:37
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#47

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 22:42
Zitat von Christian Seehase:
Moin Dax,

wozu die Pointer?
Zur Verwirrung der geneigten Leser

Ne, hab einfach vergessen, das es anders auch geht
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#48

Re: Function für Vorzeichen?

  Alt 8. Sep 2006, 23:11
Meins geht auch ohne großartige Typendeklarationen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt
Online

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.739 Beiträge
 
Delphi 2007 Professional
 
#49

Re: Function für Vorzeichen?

  Alt 9. Sep 2006, 11:18
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 mitif b < 0 then a := -a; und fertig?

Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#50

Re: Function für Vorzeichen?

  Alt 9. Sep 2006, 14:01
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;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.
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