Qu'est-ce que Division entière ?

Division d'entiers qui produit un quotient entier. Le traitement de la partie fractionnaire diffère selon les langages : certains tronquent vers zéro (C, Java), d'autres arrondissent vers moins l'infini (l'opérateur // de Python). Les résultats sont identiques pour les nombres positifs mais diffèrent pour les nombres négatifs.

Nom japonais: 整数除算

« Division entière » apparaît dans 3 questions d'entraînement réparties sur 2 thèmes, dont Arithmétique des ordinateurs, Bases de la programmation (trace de pseudo-code).

Domaine: Bases de la programmation (trace de pseudo-code)

Différences avec les nombres négatifs

Diviser −7 par 2 donne un quotient de −3 et un reste de −1 en C et en Java, qui tronquent vers zéro. L'opérateur // de Python, qui arrondit vers le bas, donne un quotient de −4, et % donne un reste de 1. Dans les deux cas, « quotient × diviseur + reste = dividende » est vérifié ; le reste a le signe du dividende en C et celui du diviseur en Python. C'est une source d'erreurs quand on transpose dans un autre langage un programme qui manipule des nombres négatifs.

En pseudo-code

Les questions en pseudo-code précisent dans l'énoncé le traitement de la partie fractionnaire de ÷. Par exemple, si l'énoncé indique que « la partie fractionnaire est supprimée lors de l'affectation à une variable entière », affecter (lo + hi) ÷ 2 à la variable entière mid supprime le 0,5 quand lo + hi est impair. Cette troncature influe sur des résultats comme la position du milieu dans une recherche dichotomique.

Lien avec les décalages

Une division entière par une puissance de 2 peut aussi se calculer par un décalage à droite en binaire. Pour les entiers non signés, x divisé par 2 est égal à x décalé de 1 bit vers la droite. Cependant, un décalage arithmétique à droite d'un nombre négatif arrondit vers le bas : le résultat peut donc différer d'une troncature vers zéro.

S'entraîner : questions sur Division entière

En arithmétique flottante IEEE 754, quel résultat la norme prévoit-elle pour la division d'un nombre positif par 0 ?

  1. A0
  2. BLe plus grand nombre normalisé
  3. CL'infini positif
Afficher la réponse et l'explication

Réponse : C. L'infini positif

IEEE 754 prévoit que la division d'un nombre non nul par 0 renvoie l'infini positif ou négatif selon le signe. L'infini est représenté par un exposant entièrement à 1 et une mantisse nulle ; il sert aussi de résultat en cas de dépassement de capacité. Le calcul se poursuit sans arrêter le programme, et l'anomalie peut être détectée ensuite en examinant le résultat. En revanche, 0 ÷ 0, indéterminé, donne NaN. Contrairement à la division entière, la virgule flottante ne s'arrête pas sur exception par défaut.

En langage C, quelle combinaison des résultats de −7 / 2 et de −7 >> 1 (décalage arithmétique à droite) en type int est correcte ?

  1. A−7 / 2 vaut −3 et −7 >> 1 vaut −4
  2. BLes deux valent −4
  3. C−7 / 2 vaut −4 et −7 >> 1 vaut −3
Afficher la réponse et l'explication

Réponse : A. −7 / 2 vaut −3 et −7 >> 1 vaut −4

En C (depuis C99), la division entière tronque le résultat vers 0 : −3,5 devient −3. Le décalage arithmétique à droite, lui, arrondit vers le bas (vers l'infini négatif) : décaler −7 (1111 1001) d'un bit vers la droite donne 1111 1100 = −4. Pour les nombres négatifs, décalage et division ne coïncident donc pas. Lorsque le compilateur remplace une division par 2 par un décalage, il ajoute des instructions de correction pour les nombres négatifs. Pour les nombres positifs, les deux coïncident.

Questions fréquentes

Que se passe-t-il en cas de division par zéro ?

La division entière par zéro est une erreur d'exécution (une exception) dans de nombreux langages et un comportement indéfini en C. Un programme doit vérifier que le diviseur n'est pas nul avant de diviser.

Quel lien y a-t-il entre le quotient et le reste de la division entière ?

Avec un quotient q et un reste r, on a dividende = q × diviseur + r. Le quotient et le reste sont définis ensemble : si l'arrondi du quotient change (troncature ou arrondi vers le bas), le reste change aussi.

« Division entière » dans les explications

Questions mentionnant « Division entière » (3)

  1. En arithmétique flottante IEEE 754, quel résultat la norme prévoit-elle pour la division d'un nombre positif par 0 ?
  2. En langage C, quelle combinaison des résultats de −7 / 2 et de −7 >> 1 (décalage arithmétique à droite) en type int est correcte ?
  3. ÷ est la division ; quand le résultat est affecté à une variable entière (y compris un argument de fonction), la partie fractionnaire est supprimée. Quelle est la valeur de retour de la fonction f suivante appelée sous la forme f(9087) ?

Termes associés

IEEE 754 Exposant Mantisse NaN Décalage arithmétique Variable Argument Valeur de retour Erreur d'arrondi Erreur off-by-one (erreur de décalage d'une unité)

Retour au glossaire