468 votes

Existe-t-il une fonction standard de signe (signum, sgn) en C/C++ ?

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 ?

-3voto

Jagreet Points 68

Pourquoi utiliser des opérateurs ternaires et des if-else quand vous pouvez simplement faire ceci

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

3 votes

Votre définition utilise également un opérateur ternaire.

0 votes

Oui Certainement, mais il n'utilise qu'un seul opérateur ternaire pour séparer les nombres zéro et non zéro. D'autres versions incluent des opérateurs ternaires imbriqués pour séparer les nombres positifs, négatifs et zéro.

0 votes

L'utilisation d'une division entière est très inefficace et abs() ne concerne que les entiers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X