Est-il un standard de la fonction signe (signum, sgn) en C/C++?

Je veux une fonction qui renvoie la valeur -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, mais il semble comme une chose qui devrait être dans une bibliothèque standard quelque part.

Edit: plus Précisément, j'étais à la recherche d'une fonction de travail sur les flotteurs.

  • Que devrait-il retourner pour 0?
  • McQueen; cela dépend si c'est positif, nul ou négatif zéro.
  • J'ai remarqué que vous avez spécifié la valeur de retour comme un entier. Vous êtes à la recherche d'une solution qui prend des entiers ou des nombres à virgule flottante?
  • Vrai pour les chars, mais pas pour les entiers, donc je suppose que la question est: est l'interlocuteur intéressé par des flotteurs ou ints?
  • McQueen, false pour les flotteurs de trop, non? sgn(x)'s définition dit de renvoyer 0 si x==0. Selon IEEE 754, zéro négatif et positif zéro devrait considérées comme égales.
  • Je ne comprends pas votre commentaire. ce que vous dites est faux?
  • dépend positif, nul ou négatif zéro". En fait, il ne le fait pas.
  • Le sgn() de votre comment est un point de vue raisonnable de la façon de traiter les zéros. OP seulement indirectement spécifié signe de zéro avec un lien. Un autre point de vue raisonnable que le "signe" est de retour 1,-1 à +zéro, zéro. Parfois le signe d'un zéro fait une différence. Il dépend des besoins de l'utilisateur. Aussi NaN est une compte que l'OP spécifié float.
  • Commentaires en retard, mais en ce qui concerne signé zéros, une autre option raisonnable est que sgn(x) retourne x, lorsque x est égal à zéro. En d'autres termes, vous obtenez 0, mais c'est un signé zéro avec le même signe que l'entrée. @RJFalconer Dans les cas relativement rares qui a signé les zéros de la matière, vous obtenez une réponse sensée, et dans l'autre cas, il ne fait aucune différence.
  • Ce résultat doit être retourné pour une valeur NaN?
  • C ou C++ - choisir un, pas deux. Ils sont des langues différentes.
  • C99, C++ : cplusplus.com/reference/cmath/signbit

InformationsquelleAutor batty | 2009-12-14