Section courante

A propos

Section administrative du site

L'arrondissement des nombres réels est l'une des opérations mathématiques les plus courantes en informatique. Que ce soit pour l'affichage de résultats financiers, la présentation de statistiques, les calculs scientifiques ou les interfaces utilisateur, il est souvent nécessaire de convertir une valeur décimale en un entier proche selon les règles classiques enseignées dans les livres de mathématiques. Pourtant, malgré la simplicité apparente de cette opération, les bibliothèques standard du langage C n'ont pas toujours proposé une fonction d'arrondissement correspondant exactement à ce que de nombreux programmeurs attendaient. Les fonctions ceil et floor permettent certes d'arrondir respectivement vers le haut ou vers le bas, mais elles ne réalisent pas l'arrondissement traditionnel où les valeurs dont la partie décimale est supérieure ou égale à 0,5 sont arrondies à l'entier supérieur.

Dans plusieurs autres langages de programmation, comme PHP ou certains dialectes de BASIC, une fonction d'arrondissement standard est généralement disponible et directement accessible. En langage C, surtout dans les anciennes implémentations ou les environnements plus limités, le programmeur devait souvent écrire lui-même cette fonctionnalité. Fait étonnant, malgré la fréquence de ce besoin, les explications claires et complètes étaient longtemps relativement rares dans les forums de discussion et les ouvrages de référence. Beaucoup de solutions proposées étaient soit incomplètes, soit limitées à certains cas particuliers. Pourtant, il suffit de quelques lignes de code pour obtenir un résultat satisfaisant dans la majorité des situations courantes.

Le principe repose sur une idée très simple : avant d'appliquer la fonction floor, qui retourne le plus grand entier inférieur ou égal à une valeur donnée, il suffit d'ajouter 0,5 au nombre à traiter. Ainsi, une valeur comme 2,3 devient 2,8 et sera ramenée à 2, tandis qu'une valeur comme 2,7 devient 3,2 et sera ramenée à 3. Cette technique permet de reproduire le comportement d'arrondissement enseigné dans les cours de mathématiques élémentaires. Bien qu'elle paraisse triviale, cette approche constitue un excellent exemple de la manière dont des fonctions plus complexes peuvent être construites à partir d'outils déjà disponibles dans la bibliothèque standard.

Le programme présenté ci-dessous illustre cette méthode en définissant une fonction round basée sur floor. Une boucle parcourt ensuite différentes valeurs comprises entre -2 et 2 afin de montrer concrètement les résultats obtenus. Les exemples affichés permettent de vérifier facilement le comportement de la fonction pour les nombres positifs, négatifs et les valeurs situées exactement à mi-chemin entre deux entiers. Cet exercice constitue une excellente introduction aux fonctions mathématiques du langage C et démontre comment quelques lignes de code bien choisies peuvent reproduire une fonctionnalité présente dans de nombreux autres environnements de programmation. Il rappelle également qu'une bonne compréhension des principes mathématiques de base demeure souvent la meilleure solution pour résoudre efficacement des problèmes apparemment simples.

Voici donc un simple petit programme montrant comment écrire une fonction «round» à partir de la fonction «floor» de l'entête «math» :

Essayer maintenant !
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. double round(double value) {
  6.      return floor(value + 0.5);
  7. }
  8.  
  9. int main()
  10. {
  11.     double I;
  12.     for(I=-2;I<=2;I+=0.1) {
  13.         printf("Le nombre %f est arrondie à %.0f\n",I,round(I));
  14.     }
  15.     return 0;
  16. }

on obtiendra le résultat suivant :

Le nombre -2.000000 est arrondie à -2
Le nombre -1.900000 est arrondie à -2
Le nombre -1.800000 est arrondie à -2
Le nombre -1.700000 est arrondie à -2
Le nombre -1.600000 est arrondie à -2
Le nombre -1.500000 est arrondie à -1
Le nombre -1.400000 est arrondie à -1
Le nombre -1.300000 est arrondie à -1
Le nombre -1.200000 est arrondie à -1
Le nombre -1.100000 est arrondie à -1
Le nombre -1.000000 est arrondie à -1
Le nombre -0.900000 est arrondie à -1
Le nombre -0.800000 est arrondie à -1
Le nombre -0.700000 est arrondie à -1
Le nombre -0.600000 est arrondie à -1
Le nombre -0.500000 est arrondie à 0
Le nombre -0.400000 est arrondie à 0
Le nombre -0.300000 est arrondie à 0
Le nombre -0.200000 est arrondie à 0
Le nombre -0.100000 est arrondie à 0
Le nombre 0.000000 est arrondie à 0
Le nombre 0.100000 est arrondie à 0
Le nombre 0.200000 est arrondie à 0
Le nombre 0.300000 est arrondie à 0
Le nombre 0.400000 est arrondie à 0
Le nombre 0.500000 est arrondie à 1
Le nombre 0.600000 est arrondie à 1
Le nombre 0.700000 est arrondie à 1
Le nombre 0.800000 est arrondie à 1
Le nombre 0.900000 est arrondie à 1
Le nombre 1.000000 est arrondie à 1
Le nombre 1.100000 est arrondie à 1
Le nombre 1.200000 est arrondie à 1
Le nombre 1.300000 est arrondie à 1
Le nombre 1.400000 est arrondie à 1
Le nombre 1.500000 est arrondie à 2
Le nombre 1.600000 est arrondie à 2
Le nombre 1.700000 est arrondie à 2
Le nombre 1.800000 est arrondie à 2
Le nombre 1.900000 est arrondie à 2


Dernière mise à jour : Samedi, le 22 août 2015