Comprendre l'opération modulo
Comprendre l'opération modulo
(opération)
opération binaire
En mathématiques, l'usage du terme modulo est différent même s'il est lié : il ne
désigne pas une opération mais intervient pour caractériser une relation de
mot clef mod associé n'est le plus souvent utilisé que pour noter cette congruence,
même si un ouvrage comme Concrete Mathematics l'utilise également pour
désigner l'opération binaire[6].
Différentes définitions de
la fonction modulo
En principe, le modulo en informatique est défini comme le reste de la division
euclidienne. C'est à dire :
a=b×q+r;
0 ≤ r < |b|.
En informatique, cette analogie fonctionne pour les entiers naturels, exemple :
12 modulo 10 = 2 car 12 = 10 * 1 + 2
Usage
En mathématique le modulo est couramment utilisé pour définir des relations de
congruence sur les entiers. C'est à dire des relations de comparaison circulaire
typique, par exemple, des calculs calendaires.
Exemple simple
Les opérations sur les horloges sont
modulo 12. C'est un cas d'usage
classique de l'opération modulo
appliqué aux entiers naturels, en
mathématique comme en
informatique.
En effet, sur une horloge, l'addition des heures est circulaire : si il est 9h et que je
rajoute 4h alors il est 13h, mais, sur une horloge qui repasse à 0 après le passage
à 12, alors il est noté 1h.
1 ≡ 13 (mod 12).
En effet, le reste de la division reste positif dans tout les cas (voir schéma ci-
contre), contrairement à de nombreuses autres définitions utilisées en
informatique (voir sections ci-après).
Les différentes
définitions en
informatique
Exemple :
117 17 6 15
−117 17 −7 2
117 −17 −7 −2
Cette définition vérifie les lois de l'arithmétique modulo, plus : x mod −y = −((−x)
mod y). Elle convient pour les calculs cycliques. La valeur modulaire retournée est
toujours du signe du diviseur (le diviseur étant positif dans la plupart des calculs
cycliques).
Définition utilisant la troncature
de la partie décimale
117 17 6 15
−117 17 −6 −15
117 −17 −6 15
Cette définition vérifie la loi: x mod −y = x mod y. Elle viole la loi (x+n) mod n = x
mod n.
117 17 6 15 6 15 6 15
−117 17 −7 2 −6 −15 -7 2
117 −17 −7 −2 −6 15 -6 15
Toutefois, du strict point de vue des définitions utilisées dans les langages
informatiques, les deux définitions informatiques précédentes du modulo restent
valide et permettent donc à x et y d'être des nombres rationnels (ou réels en
mathématiques, bien que les systèmes informatiques de calcul numérique ne
sachent travailler que sur un sous-ensemble des nombres rationnels, du fait de
limites de précision).
Comportement des
langages de
programmation
Tableau récapitulatif des différents opérateurs et de leurs définition en fonction du langage
informatique
Prends
Prise
en
char
Language Operateur charge
nomb
les
flottan
entiers ?
[note 1]
APL | Oui O
AutoLISP de
(rem d n) Oui (no)
AutoCAD
bc (voir bc
% Oui (no)
(Unix))
fmod (C)
C[8] (no) O
std::fmod (C++)
C++
remainder (C)
(no) O
std::remainder (C++)
% Oui O
C#
[Link] (no) O
Prends
Prise
en
char
Language Operateur charge
nomb
les
flottan
entiers ?
Clarion
% Oui (no)
(langage)
% Oui (no)
CoffeeScript
%% Oui (no)
mod Oui O
Common Lisp
rem Oui O
Crystal (langage
% , modulo Oui O
de
programmation) remainder Oui O
D (langage) % Oui O
% Oui O
Dart (langage)
remainder() Oui O
(langage)
remainder Oui (no)
% Oui O
F#
[Link] (no) O
Forth (langage)
fm/mod Oui (no)
mod Oui O
Fortran
modulo Oui O
% Oui (no)
GLSL
mod (no) O
GameMaker
mod , % Oui (no)
Studio (GML)
% Oui (no)
fmod (no) O
GDScript
(Godot) posmod Oui (no)
fposmod (no) O
% Oui (no)
Groovy
% Oui (no)
(langage)
HLSL % Oui O
[note 1]
J (langage) | Oui (no)
% Oui O
Java (langage)
[Link] Oui (no)
Prends
Prise
en
char
Language Operateur charge
nomb
les
flottan
entiers ?
JavaScript
% Oui O
TypeScript
mod Oui O
Julia (langage)
% , rem Oui O
% , rem Oui O
Kotlin (langage)
mod Oui O
% Oui (no)
ksh
fmod (no) O
Liberty BASIC
MOD Oui (no)
(en)
frem(e, m) Oui O
Prends
Prise
en
char
Language Operateur charge
nomb
les
flottan
entiers ?
(logiciel)
remainder Oui (no)
Maya
Embedded % Oui (no)
Language
Oberon
MOD Oui (no)
(langage)
Object Pascal,
Delphi mod Oui (no)
(langage)
Occam
\ Oui (no)
(langage)
Pascal
(langage) (ISO-
mod Oui (no)
7185 and
-10206)
% Oui (no)
Perl (langage)
POSIX::fmod (no) O
% Oui (no)
PHP
fmod (no) O
Programming
[Link] - 'MOD; (\)' Oui (no)
Code (PRC)
Progress
(Progress modulo Oui (no)
Software)
Prends
Prise
en
char
Language Operateur charge
nomb
les
flottan
entiers ?
Prolog (ISO
1995 ([Link] mod Oui (no)
[Link]/stan
dard/[Link]
rem Oui (no)
ml) [archive])
% Oui (no)
Pure Data
mod Oui (no)
% Oui O
Python
[Link] (no) O
Q# % Oui (no)
R (langage) %% Oui O
Raku % (no) O
Rexx // Oui O
% , modulo() Oui O
Ruby
remainder() Oui O
Prends
Prise
en
char
Language Operateur charge
nomb
les
flottan
entiers ?
% Oui O
Rust
rem_euclid() Oui O
Scala % Oui O
flmod0 (no) O
mod Oui O
Seed7
rem Oui O
sh (POSIX)
(includes bash, % Oui (no)
mksh, &c.)
\\ Oui (no)
Smalltalk
rem: Oui (no)
Standard ML
[Link] Oui (no)
[Link] (no) O
% Oui (no)
truncatingRemainder(dividingBy:) (no) O
% Oui (no)
Tcl
fmod() (no) O
% Oui O
XBase++
Mod() Oui O
%,
Zig Oui O
@mod , @rem
Z3 theorem
div , mod Oui (no)
prover
Équivalence
Les opérations sur les modulos peuvent être réduites ou étendues de la même
manière que les autres opérations mathématiques.
Identité:
pour tous
les entiers strictement
positifs .
Si est un nombre premier
qui n'est pas un diviseur de ,
alors
est l'inverse
modulaire, qui est défini si et
seulement si et sont
premiers entre eux, ce qui est
le cas quand la partie gauche
est définie:
.
Distributivité:
D’où :
Division (définition):
Notes et références
Notes
Références
Portail de l’informatique
Ce document provient de
« [Link]
title=Modulo_(opération)&oldid=216658120
».