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?
0 Stimmen
@ysth: Richtig für Floats, aber nicht für Ints. Die Frage ist also: Ist der Fragesteller an Floats oder Ints interessiert?
11 Stimmen
@ysth @Craig McQueen, false auch für Floats, oder? sgn(x)'s Definition besagt, dass 0 zurückgegeben werden soll, wenn
x==0
. Nach IEEE 754 sollten negative Nullen und positive Nullen als gleichwertig betrachtet werden.0 Stimmen
@RJFalconer: Ich verstehe Ihren Kommentar nicht. Was sagen Sie, ist falsch?
9 Stimmen
@ysth "es hängt von der positiven Null oder der negativen Null ab". In der Tat, das ist nicht der Fall.
0 Stimmen
@RJFalconer Die
sgn()
Ihrer Kommentar ist eine vernünftige Vorstellung davon, wie Nullen zu behandeln sind. OP hat das Vorzeichen der Null nur indirekt mit einem Link angegeben. Eine andere vernünftige Sichtweise auf das "Vorzeichen" ist die Rückgabe von 1,-1 bei +Null, -Null. Manchmal ist das Vorzeichen von Null macht einen Unterschied . Das hängt von den Bedürfnissen des Benutzers ab. Auch NaN ist eine Berücksichtigung wie von OP angegebenfloat
.8 Stimmen
Zu spät kommentiert, aber in Bezug auf vorzeichenbehaftete Nullen ist eine weitere vernünftige Option, dass sgn(x) x zurückgibt, wenn x Null ist. Mit anderen Worten, man bekommt 0 heraus, aber es ist eine vorzeichenbehaftete Null mit dem gleichen Vorzeichen wie die Eingabe. @RJFalconer In den relativ wenigen Fällen, in denen vorzeichenbehaftete Nullen eine Rolle spielen, erhält man eine vernünftige Antwort, und in den anderen Fällen macht es keinen Unterschied.
1 Stimmen
Welches Ergebnis sollte für einen NaN-Wert zurückgegeben werden?
0 Stimmen
C oder C++ - wählen Sie eines, nicht beide. Es sind unterschiedliche Sprachen.
0 Stimmen
C99, C++ : cplusplus.com/referenz/cmath/signbit