Je veux une fonction qui renvoie -1 pour les nombres négatifs et +1 pour les nombres positifs. http://en.wikipedia.org/wiki/Sign_function Il est assez facile d'écrire mon propre code, mais il semble que ce soit quelque chose qui devrait se trouver quelque part dans une bibliothèque standard.
Edit : Plus précisément, je cherchais une fonction fonctionnant sur les flottants.
21 votes
Que doit-il retourner pour 0 ?
78 votes
@Craig McQueen ; cela dépend si c'est un zéro positif ou un zéro négatif.
1 votes
J'ai remarqué que vous avez spécifié la valeur de retour comme un nombre entier. Cherchez-vous une solution qui prend des entiers ou des nombres à virgule flottante ?
0 votes
@ysth : C'est vrai pour les flottants mais pas pour les ints, donc je suppose que la question est : est-ce que le questionneur est intéressé par les flottants ou les ints ?
9 votes
@ysth @Craig McQueen, faux pour les flottants aussi, non ? sgn(x)'s définition dit de retourner 0 si
x==0
. Selon IEEE 754 le zéro négatif et le zéro positif doivent être comparés comme égaux.0 votes
@RJFalconer : Je ne comprends pas votre commentaire. Que dites-vous qui est faux ?
9 votes
@ysth "cela dépend du zéro positif ou du zéro négatif". En fait, ce n'est pas le cas.
0 votes
@RJFalconer Le
sgn()
de votre commentaire est une vision raisonnable de la façon de gérer les zéros. OP ne spécifie qu'indirectement le signe du zéro avec un lien. Une autre vision raisonnable du "signe" est de retourner 1,-1 sur +zéro,-zéro. Parfois, le signe de zéro fait la différence . Cela dépend des besoins de l'utilisateur. Voir aussi NaN est un considération selon les indications de l'OPfloat
.6 votes
Je commente tardivement, mais concernant les zéros signés, une autre option raisonnable est que sgn(x) renvoie x, lorsque x est zéro. En d'autres termes, vous obtenez 0, mais c'est un zéro signé avec le même signe que l'entrée. @RJFalconer Dans les cas relativement peu nombreux où les zéros signés importent, vous obtenez une réponse sensée, et dans les autres cas, cela ne fait aucune différence.
1 votes
Quel résultat doit être renvoyé pour une valeur NaN ?
0 votes
C ou C++ - choisissez-en un, pas les deux. Ce sont des langages différents.
0 votes
C99, C++ : cplusplus.com/reference/cmath/signbit