ABS |
Valeur absolue |
---|---|
Langage C++ | cstdlib (stdlib.h) |
Syntaxe
int abs(int n); |
Paramètres
Nom | Description |
---|---|
n | Ce paramètre permet d'indiquer l'expression contenant le nombre à traiter |
Retour
Valeur | Description |
---|---|
0 ou supérieur | Ces valeurs sont les seules pouvant être retourné. La valeur absolue d'un nombre est toujours positive. |
Description
Cette fonction retourne la valeur absolue d'un nombre. Ainsi, le signe (négatif), s'il existe, est retiré de façon à conserver uniquement les chiffres du nombre sans toutefois changer sa valeur. Voici un graphique de représentation de la distribution de cette valeur :

Algorithme
MODULE ABS(valeur) SI valeur < 0 ALORS RETOURNE - valeur SINON RETOURNE valeur FIN SI |
Remarques
- La fonction abs() renvoie la valeur absolue du paramètre n. La version avec un type de données long de abs() est identique à labs(). La version avec un type de données double de la fonction abs() est la même que la fonction fabs().
- La valeur absolue qu'utilise le langage de programmation de C++ utilise les mêmes règles que celle de la fonction mathématique absolue «|x|».
- Les mathématiciens expriment cette fonction de la façon suivante : f(x) = | x |, laquelle correspond au trois définitions suivantes :
- SI x > 0 ALORS | x | = x,
- SI x < 0 ALORS | x | = - x,
- SI x = 0 ALORS | x | = 0.
- La valeur absolue, par définition, enlève le signe. Donc, on ne peut pas recevoir un nombre négatif comme résultat.
- Définition et fonctionnement : La fonction abs en C++ est utilisée pour obtenir la valeur absolue d'un nombre, c'est-à-dire sa distance à zéro sur la droite des réels. Pour un nombre négatif, elle retourne son opposé, tandis qu'un nombre positif (ou zéro) reste inchangé. Par exemple, abs(-5) renvoie 5.
- Différentes versions selon le type de données : La bibliothèque <cmath> propose différentes surcharges pour abs en fonction du type de paramètre passé. On trouve int abs(int), long abs(long), long long abs(long long), ainsi que leurs versions pour les nombres flottants via fabs.
- Utilisation pour les nombres flottants : Pour les nombres à virgule flottante (float, double, long double), abs ne fonctionne pas directement. Il faut utiliser fabs, fabsf, ou fabsl, disponibles dans <cmath>. Par exemple, fabs(-3.14) retourne 3.14.
- Alternative avec la Bibliothèque <cstdlib>: En plus de <cmath>, la fonction abs est aussi définie dans <cstdlib> pour les types entiers (int, long,...). Cela peut prêter à confusion si plusieurs bibliothèques sont incluses dans un même programme.
- Différence avec std::abs : En C++, la version standard std::abs (définie dans <cmath>) est recommandée, car elle gère correctement la surcharge pour les différents types numériques, contrairement à la version C trouvée dans <cstdlib>.
- Comportement indéfini en cas de dépassement : Si abs est appelé avec INT_MIN (la valeur minimale d'un entier signé), un dépassement peut se produire, car -INT_MIN dépasse la capacité d'entreposage d'un int. Par exemple, sur un système 32 bits, abs(-2147483648) entraîne un comportement indéfini.
- Utilisation en programmation générique : Dans le cadre de la programmation générique avec des gabarits, std::abs est recommandé pour éviter des erreurs de type et assurer la compatibilité avec les différents types de nombres entiers et flottants.
- Performances et optimisation : Sur la plupart des architectures, abs est optimisé au niveau du processeur pour s'exécuter rapidement, souvent en une seule instruction (AND, XOR, ou SUB). Cependant, il est toujours utile de mesurer l'impact de son utilisation dans des boucles intensives.
Exemple
Voici un exemple montrant une utilisation de la valeur absolue avec des parenthèses :

on obtiendra le résultat suivant :
Abs(9*(-7))=63Voici un exemple montrant une utilisation plus classique de la valeur absolue :

on obtiendra le résultat suivant :
Abs(1)=1Abs(-1)=1
Abs(30.2)=30.2
Abs(-35.4)=35.4
Voici un exemple montrant la différence de résultats avec la fonction «SGN» :

- #include <iostream>
- #include <cstdlib>
-
- int sgn(double valeur) {
- if(valeur < 0) return -1;
- if(valeur == 0) return 0;
- return 1;
- }
-
- int main() {
- std::cout << "abs(1)=" << abs(1) << ", sgn(1)=" << sgn(1) << std::endl;
- std::cout << "abs(-1)=" << abs(-1) << ", sgn(-1)=" << sgn(-1) << std::endl;
- std::cout << "abs(0)=" << abs(0) << ", sgn(0)=" << sgn(0) << std::endl;
- std::cout << "abs(5)=" << abs(5) << ", sgn(5)=" << sgn(5) << std::endl;
- std::cout << "abs(10)=" << abs(10) << ", sgn(10)=" << sgn(10) << std::endl;
- std::cout << "abs(-17)=" << abs(-17) << ", sgn(-17)=" << sgn(-17) << std::endl;
- std::cout << "abs(27.4)=" << abs(27.4) << ", sgn(27.4)=" << sgn(27.4) << std::endl;
- std::cout << "abs(-12.13)=" << abs(-12.13) << ", sgn(-12.13)=" << sgn(-12.13) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
abs(1)= 1 , sgn(1)= 1abs(-1)= 1 , sgn(-1)=-1
abs(0)= 0 , sgn(0)= 0
abs(5)= 5 , sgn(5)= 1
abs(10)= 10 , sgn(10)= 1
abs(-17)= 17 , sgn(-17)=-1
abs(27.4)= 27.3999996185303 , sgn(27.4)= 1
abs(-12.13)= 12.1300001144409 , sgn(-12.13)=-1
Voici un exemple montrant comment effectuer une comparaison avec Abs :

on obtiendra le résultat suivant :
|a| > |b|Voici un exemple montrant comment calculer la distance entre deux nombres à l'aide de la fonction Abs :

- #include <iostream>
- #include <cstdlib>
-
- int main() {
- std::cout << "La distance entre -8 et 10 = " << abs(-8 - 10) << std::endl;
- std::cout << "La distance entre 4 et 8 = " << abs(4 - 8) << std::endl;
- std::cout << "La distance entre 0 et 5 = " << abs(0 - 5) << std::endl;
- std::cout << "La distance entre -100 et 100 = " << abs(-100 - 100) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
La distance entre -8 et 10 = 18La distance entre 4 et 8 = 4
La distance entre 0 et 5 = 5
La distance entre -100 et 100 = 200
Voir également
Langage de programmation - C++ - Référence procédures et fonctions - fabs
Langage de programmation - C++ - Référence procédures et fonctions - labs
Langage de programmation - C - Référence procédures et fonctions - abs
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 730.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 27.