gibt es SGN-Funktion in C?
-
Only-Olli: ich werde es mal bei thedailywtf melden.
-
Only-Olli schrieb:
ich kriegs leider nur für c++ hin:
:open_mouth: :open_mouth: :open_mouth: :open_mouth:
macht man das wirklich so in c++
mein vorschlag (für ints <= 32 bit):
#define SGN(x) (((x)>>30)|1)
-
@Only-Olli... wow das ist overhead pur...
-
ten schrieb:
Only-Olli schrieb:
ich kriegs leider nur für c++ hin:
:open_mouth: :open_mouth: :open_mouth: :open_mouth:
macht man das wirklich so in c++
mein vorschlag (für ints <= 32 bit):
#define SGN(x) (((x)>>30)|1)
Deine Methode ist krasser!
Bei negativen Zahlen liefert sie immer 3 (int = 32 Bit)
Bei positiven Zahlen liefert sie 1 und wenn x == 0 auch 1
-
egon2 schrieb:
Bei negativen Zahlen liefert sie immer 3 (int = 32 Bit)
dann haste was falsch gemacht
egon2 schrieb:
...und wenn x == 0 auch 1
richtich, 'ne 0 hat ja auch kein vorzeichen.
da kann dieses makro auch nix für
-
ten du troll, mach die leute nicht wuschig!
das vorzeichenbit bei 32 bit signed ints ist (1<<31) und wenn einer mit embedded geschichten kommt, wirst du geteert und gefedert.
-
@ten: wollte er nicht auch noch wissen, ob seine zahl ne 0 ist?
Input: -1
Output: -1Input: 0
Output 1Input 1
Output 1und so fehlt doch noch was in deinem makro
-
c.rackwitz schrieb:
das vorzeichenbit bei 32 bit signed ints ist (1<<31)...
ist jemand anderer meinung?
Jay schrieb:
@ten: wollte er nicht auch noch wissen, ob seine zahl ne 0 ist?
Input: -1
Output: -1Input: 0
Output 1Input 1
Output 1und so fehlt doch noch was in deinem makro
ja, stimmt.
also entweder
- man vermeidet, dass dam makro eine 0 gegeben wird
oder
- das 'aus 0 mach 1' hat keinen negativen effekt (dann kann man's so lassen)
oder
- man baut ein 'conditional' ins makro ein: #define SGN(x) ((x)?(((x)>>30)|1):0)
-
Man muss nicht alles mit Bitshifts machen
-
Voll optimiert ist meine "C++-Methode" (die natürlich Schwachsinn ist ^^), nur 3mal langsamer als das SGN-Makro mit den zwei Vergleichen!... Jah und jetzt kommt ihr!