519 Stimmen

Gibt es eine Standard-Vorzeichenfunktion (signum, sgn) in C/C++?

Ich möchte eine Funktion, die -1 für negative Zahlen und +1 für positive Zahlen zurückgibt. http://en.wikipedia.org/wiki/Sign_function Es ist einfach genug, meine eigene zu schreiben, aber es scheint etwas zu sein, das irgendwo in einer Standardbibliothek sein sollte.

Edit: Ich habe speziell nach einer Funktion gesucht, die mit Floats arbeitet.

28 Stimmen

Was sollte er für 0 zurückgeben?

91 Stimmen

@Craig McQueen; das hängt davon ab, ob es sich um eine positive Null oder eine negative Null handelt.

1 Stimmen

Mir ist aufgefallen, dass Sie den Rückgabewert als Ganzzahl angegeben haben. Suchen Sie nach einer Lösung, die Ganzzahlen oder Fließkommazahlen verarbeitet?

-4voto

Jagreet Punkte 115

Warum sollten Sie ternäre Operatoren und if-else verwenden, wenn Sie einfach Folgendes tun können

#define sgn(x) x==0 ? 0 : x/abs(x)

4 Stimmen

Ihre Definition verwendet ebenfalls einen ternären Operator.

0 Stimmen

Ja, definitiv, aber es wird nur ein ternärer Operator verwendet, um Nullen und Nicht-Nullen zu trennen. Andere Versionen enthalten verschachtelte ternäre Operatoren zur Trennung von positiven, negativen und Nullen.

0 Stimmen

Die Verwendung einer Ganzzahldivision ist sehr ineffizient und abs() ist nur für Ganzzahlen geeignet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X