Aller au contenu
OneKitly

Moins dix-sept modulo cinq a deux réponses différentes

Publié le 16/10/2026 · 4 min de lecture · Outils pour développeurs

Daniel Okonkwo

Daniel Okonkwo — Développeur front-end et rédacteur Tech chez OneKitly

Performance web · Formats de fichiers

Vérifié à partir de 2 sources

Voir le profil →
En bref

Le reste de 17 divisé par 5 vaut 2 et personne n'en discute. Donne-lui un dividende négatif et la réponse se scinde, car les langages divergent sur le quotient et non sur le reste : −17 ÷ 5 vaut soit −3 avec un reste de −2, soit −4 avec un reste de 3, et les deux satisfont l'identité qui veut que le quotient fois le diviseur plus le reste redonne le dividende. Les langages qui tronquent le quotient vers zéro — JavaScript, C, Java, Go — rendent −2 et donnent au reste le signe du dividende. Ceux qui prennent la partie entière inférieure — Python, Ruby, et la fonction MOD d'un tableur — rendent 3 et donnent au reste le signe du diviseur. Ce calculateur suit la première convention.

17 mod 5 vaut 2 partout. −17 mod 5 vaut −2 en JavaScript, C et Java, et 3 en Python, Ruby et dans un tableur. Les deux sont justes, et l'écart est un vrai bogue.

Le bogue a toujours la même allure

Faire boucler un indice sur un tableau est le cas d'école. Avancer avec (i + 1) % n se comporte parfaitement, si bien que personne ne réfléchit avant d'écrire (i − 1) % n dans l'autre sens — et dans un langage tronquant, cela rend −1 quand i vaut 0, ce qui n'indexe rien et ressort trois écrans plus loin en diapositive vide de carrousel ou en plantage dans un réducteur. Le remède est l'incantation standard ((i − 1) % n + n) % n, qui force le résultat positif dans n'importe quel langage : pour n = 5 et i = 0, elle donne 4, le dernier élément, ce que boucler en arrière était censé signifier. Écris-la une fois dans une fonction utilitaire et n'y pense plus.

Le modulo est l'arithmétique de tout ce qui cycle

Horloges, jours de la semaine, roues chromatiques, tampons circulaires et tables de hachage en vivent, et la clé de contrôle au dos d'une carte bancaire aussi. Partout où une valeur doit revenir au début, c'est le reste qui la ramène — et lire un diviseur comme « combien d'heures sur ce cadran » rend la plupart du code à modulo évident au premier coup d'œil. Cela explique aussi pourquoi la question du signe pèse tant en pratique : une horloge qui affiche −2 heures n'a pas tort, on ne lui a simplement pas dit que ce cadran-ci ne montre que des nombres de 0 à 4.

Partie entière inférieure (Python, Ruby, MOD)
La même expression, deux familles de langages
ExpressionTronqué (JS, C, Java)Partie entière inférieure (Python, Ruby, MOD)
17 mod 522
−17 mod 5−23
17 mod −52−3

Exemple calculé avec notre outil

Calculateur de modulo

Données

Dividende
9
Diviseur
3

Résultat

Reste (a mod b)
0
Quotient
3

Ces chiffres sont produits par le calculateur ci-dessous, pas saisis à la main — ils sont recalculés à chaque évolution de l'outil.

Refaire ce calcul avec tes chiffres →

Questions fréquentes

Que fait-il avec des décimaux ?
Il fonctionne toujours — le reste de 17,5 par 5 vaut 2,5 — mais la virgule flottante binaire rend le résultat peu fiable aux bords. Des valeurs qui paraissent exactes en décimal ne le sont pas en binaire : une expression censée tomber sur zéro peut tomber sur un nombre positif infime ou sur le diviseur lui-même, et un test « le reste est-il nul » échoue alors sur des nombres qui divisent visiblement. Quand ce contrôle compte, ramène d'abord à des entiers — travaille en centimes plutôt qu'en euros, en millisecondes plutôt qu'en secondes — et tiens le modulo entièrement à l'écart du flottant.
Quelle convention préférer ?
Celle de la partie entière inférieure, chaque fois que le choix t'appartient. Un reste qui porte toujours le signe du diviseur reste dans l'intervalle qu'on veut réellement quand le diviseur est positif, c'est-à-dire dans presque tous les usages pratiques, et rend inutile la fonction de bouclage. La convention tronquée existe surtout parce que le matériel des débuts divisait ainsi et que C a suivi le matériel ; elle survit par inertie et par compatibilité, non par mérite. Comme on choisit rarement son langage, la bonne habitude est simplement de vérifier dans lequel on se trouve avant d'écrire un modulo sur quoi que ce soit qui puisse devenir négatif.

Articles qui pourraient t'intéresser

Tous les guides →

Outils similaires

Sources

Tu as repéré une erreur dans cet article ?