Modulo (opération)

Apparence déplacer vers la barre latérale masquer Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

Cet article ne cite pas suffisamment ses sources (juin 2009).

Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ».

En pratique : Quelles sources sont attendues ? Comment ajouter mes sources ?

En informatique, l'opération modulo,, ou opération mod, est une opération binaire qui associe, dans le cas de deux entiers naturels, le reste de la division euclidienne du premier par le second, le reste de la division de a par n (n ≠ 0) est noté a mod n (ou a % n dans certains langages informatiques). Ainsi 9 mod 4 = 1, car 9 = 2×4 + 1 et 0 ≤ 1 < 4. De même 9 mod 3 = 0. L'opération peut être étendue aux entiers relatifs, voire aux nombres réels, mais alors les langages de programmation peuvent diverger de la définition mathématique, en particulier a mod n n'est plus forcément positif ou nul comme l'impose la définition mathématique du reste de la division euclidienne.

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 congruence sur les entiers (et plus généralement pour d'autres congruences) ; le 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.

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 :

Soit la division euclidienne de a par b, on vérifie :

En informatique, cette analogie fonctionne pour les entiers naturels, exemple :

12 modulo 10 <=> reste de la division euclidienne de 12 par 10

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.

En informatique, le modulo est classiquement utilisé dans le même esprit.

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.

Un exemple classique utilisé en mathématique et également représentatif de son usage en informatique, est le calcul sur une horloge.

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.

On dit que les opérations sur l'horloge sont alors « modulo 12 ».

1 et 13 sont alors dit « congrus modulo 12 », ou encore :

1 ≡ 13 (mod 12).

En considérant le modulo comme une opération, comme c'est le cas en informatique, on écrirait :

Heure_finale = ( Heure_initiale + x ) mod 12

De manière générale, en informatique, l'opération modulo est utilisée pour toute opération circulaire similaire (calcul calendaire, certains parcours de tableau etc.)

Exemple avec des décalages circulaires

L'opération modulo permet d'effectuer un décalage circulaire d'indices. En effet, si l'on considère la suite des entiers contigus de 1 à n, u = (1, 2, 3, …, n − 1, n), alors on peut décaler de p rangs avec :

u'i = ((ui + p − 1) mod n) + 1.

Par exemple, pour décaler de deux la suite (1, 2, 3, 4, 5) :

u'i = ((ui + 1) mod 5) + 1 ;

on a bien :

et donc u' = (3, 4, 5, 1, 2).

Divergence des définitions dans les cas autres que les entiers naturels ...

Représentations graphiques des fonctions «reste» (en vert ) et «quotient» (en rouge) dans la division euclidienne par un entier n, à gauche pour un entier n positif et à droite pour un entier n négatif.Le reste de la division euclidienne reste positif dans tous les cas.

L'analogie avec la définition du reste de la division euclidienne est brisée une fois qu'on l'étend aux entiers négatifs ou aux réels. Le comportement du modulo diffère alors en fonction des langages de programmation et ne respecte en général plus la définition mathématique du reste de la division euclidienne.

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).

On décrit ci-dessous quelques-unes des définitions courantes dans les langages informatiques.

Les différentes définitions en informatique

Définition utilisant la partie entière (inférieure)

Article connexe : Partie entière et partie fractionnaire. Évolution du quotient et du reste (résultat du modulo) en fonction des éléments a et b et du signe du diviseur dans le cas où on utilise la définition utilisant la partie entière.

Soit la notation ⌊ x ⌋ {\displaystyle \lfloor x\rfloor } définissant le plus grand entier inférieur ou égal à x.

Alors on peut poser une définition du modulo tel que :

a mod n = a − ⌊ a n ⌋ × n {\displaystyle a{\bmod {n}}=a-\left\lfloor {\frac {a}{n}}\right\rfloor \times n}

L'opérateur mod retourne alors un modulo toujours compris entre 0 (inclus) et le diviseur n (exclu) et qui a le même signe que le diviseur n. Ce qui le distingue du reste de la division euclidienne puisque le modulo peut alors être négatif quand le quotient est négatif.

Exemple :

Dividende Diviseur Quotient Reste
117 17 6 15
−117 17 −7 2
−117 −17 6 −15
117 −17 −7 −2
12,7 3,5 3 2,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

Évolution du quotient et du reste (résultat du modulo) en fonction des éléments a et b et du signe du diviseur dans le cas où on utilise la définition utilisant la troncature.

{\displaystyle \left} est la troncature entière de x.

a mod n = a − × n {\displaystyle a{\bmod {n}}=a-\left\times n}

L'opérateur mod retourne alors :

Exemple :

Dividende Diviseur Quotient Reste
117 17 6 15
−117 17 −6 −15
−117 −17 6 −15
117 −17 −6 15

Le modulo a le même signe que l'opérande gauche.

Cette définition vérifie la loi: x mod −y = x mod y. Elle viole la loi (x+n) mod n = x mod n.

Définition utilisant l'arrondi

Évolution du quotient et du reste (résultat du modulo) en fonction des éléments a et b et du signe du diviseur dans le cas où on utilise la définition utilisant l'arrondi.

On peut également utiliser l'arrondi en définissant le quotient tel que :

q = a r r o n d i ( a b ) {\displaystyle q=arrondi({\frac {a}{b}})}

Où « arrondi » est la fonction arrondi.

Le reste, résultat du modulo, est alors défini par :

r = a − n ∗ a r r o n d i ( a b ) {\displaystyle r=a-n*arrondi({\frac {a}{b}})}

Cette définition est notamment utilisée dans le langage LISP.

Définition utilisant la partie entière supérieure

Évolution du quotient et du reste (résultat du modulo) en fonction des éléments a et b et du signe du diviseur dans le cas où on utilise la définition utilisant l'arrondi.

Soit la notation ⌈ x ⌉ {\displaystyle \left\lceil x\right\rceil } définissant le plus petit entier supérieur ou égal à x.

Alors on peut poser une définition du quotient ainsi :

q = ⌈ a n ⌉ {\displaystyle q=\left\lceil {\frac {a}{n}}\right\rceil }

Et la définition du modulo tel que :

a mod n = a − ⌈ a n ⌉ × n {\displaystyle a{\bmod {n}}=a-\left\lceil {\frac {a}{n}}\right\rceil \times n}

Le comportement est proche de celui de la partie entière inférieure.

Ce comportement est également trouvé en LISP.

Comparaison sous forme de tableau

Cette section est vide, insuffisamment détaillée ou incomplète. Votre aide est la bienvenue ! Comment faire ? comparaison des opérateurs Modulo
partie entière troncature fonct. euclidienne
Dividende Diviseur Quotient Reste Quotient Reste Quotient Reste
117 17 6 15 6 15 6 15
−117 17 −7 2 −6 −15 -7 2
−117 −17 6 −15 6 −15 7 2
117 −17 −7 −2 −6 15 -6 15
12,7 3,5 3 2,2

Comportement avec des opérandes non entiers

D'un point de vue strictement mathématique, il n'existe pas d'équivalent strict au modulo dans l'espace des réels. Il peut exister des équivalences partielles mais certaines opérations ne sont alors plus valables.

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).

Cependant, par analogie avec la fonction mathématique, en C, C++, PHP et de nombreux langages, l'opérateur mod ou % n'opère que sur les types entiers. A contrario : dans certains cas l'opérateur modulo est étendu aux réels. Attention, parce que suivant le langage, les types numériques sont parfois convertis implicitement en entiers (par coercition) ce qui peut donner l'impression que l'opérateur est étendu aux réels quand ce n'est pas le cas.

Comportement des langages de programmation

Tableau récapitulatif des différents opérateurs et de leurs définition en fonction du langage informatique
Language Operateur Prends en charge les entiers ? Prise en charge nombre flottants ? Définition utilisée
ABAP MOD Oui Oui Euclidienne
ActionScript % Oui (no) Troncature
Ada (langage) mod Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
ALGOL 68 ÷×, mod Oui (no) Euclidienne
AMPL mod Oui (no) Troncature
APL | Oui Oui Partie entière (inférieure)
AppleScript mod Oui (no) Troncature
AutoLISP de AutoCAD (rem d n) Oui (no) Troncature
AWK % Oui (no) Troncature
bash % Oui (no) Troncature
BASIC Mod Oui (no) Dépends de l'implémentation
bc (voir bc (Unix)) % Oui (no) Troncature
C
C++
%, div Oui (no) Troncature
fmod (C)
std::fmod (C++)
(no) Oui Troncature
remainder (C)
std::remainder (C++)
(no) Oui Arrondie
C# % Oui Oui Troncature
Math.IEEERemainder (no) Oui Arrondie
Clarion (langage) % Oui (no) Troncature
Clean rem Oui (no) Troncature
Clojure mod Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
COBOL FUNCTION MOD Oui (no) Partie entière (inférieure)
FUNCTION REM Oui Oui Troncature
CoffeeScript % Oui (no) Troncature
%% Oui (no) Partie entière (inférieure)
ColdFusion %, MOD Oui (no) Troncature
Common Intermediate Language rem (signed) Oui Oui Troncature
rem.un (unsigned) Oui (no) NC
Common Lisp mod Oui Oui Partie entière (inférieure)
rem Oui Oui Troncature
Crystal (langage de programmation) %, modulo Oui Oui Partie entière (inférieure)
remainder Oui Oui Troncature
D (langage) % Oui Oui Troncature
Dart (langage) % Oui Oui Euclidienne
remainder() Oui Oui Troncature
Eiffel (langage) \\ Oui (no) Troncature
Elixir (langage) rem/2 Oui (no) Troncature
Integer.mod/2 Oui (no) Partie entière (inférieure)
Elm (langage) modBy Oui (no) Partie entière (inférieure)
remainderBy Oui (no) Troncature
Erlang (langage) rem Oui (no) Troncature
math:fmod/2 (no) Oui Troncature (identique au C)
Euphoria (langage) mod Oui (no) Partie entière (inférieure)
remainder Oui (no) Troncature
F# % Oui Oui Troncature
Math.IEEERemainder (no) Oui Arrondie
Factor mod Oui (no) Troncature
FileMaker Mod Oui (no) Partie entière (inférieure)
Forth (langage) mod Oui (no) Dépends de l'implémentation
fm/mod Oui (no) Partie entière (inférieure)
sm/rem Oui (no) Troncature
Fortran mod Oui Oui Troncature
modulo Oui Oui Partie entière (inférieure)
Frink mod Oui (no) Partie entière (inférieure)
Full BASIC (standard ANSI) (en) MOD Oui Oui Partie entière (inférieure)
REMAINDER Oui Oui Troncature
GLSL % Oui (no) Non défini
mod (no) Oui Partie entière (inférieure)
GameMaker Studio (GML) mod, % Oui (no) Troncature
GDScript (Godot) % Oui (no) Troncature
fmod (no) Oui Troncature
posmod Oui (no) Partie entière (inférieure)
fposmod (no) Oui Partie entière (inférieure)
Go (langage) % Oui (no) Troncature
math.Mod (no) Oui Troncature
big.Int.Mod Oui (no) Euclidienne
Groovy (langage) % Oui (no) Troncature
Haskell mod Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
Data.Fixed.mod' (GHC) (no) Oui Partie entière (inférieure)
Haxe % Oui (no) Troncature
HLSL % Oui Oui Non défini
J (langage) | Oui (no) Partie entière (inférieure)
Java (langage) % Oui Oui Troncature
Math.floorMod Oui (no) Partie entière (inférieure)
JavaScript
TypeScript
% Oui Oui Troncature
Julia (langage) mod Oui Oui Partie entière (inférieure)
%, rem Oui Oui Troncature
Kotlin (langage) %, rem Oui Oui Troncature
mod Oui Oui Partie entière (inférieure)
ksh % Oui (no) Troncature (identique à POSIX sh)
fmod (no) Oui Troncature
LabVIEW mod Oui Oui Troncature
LibreOffice =MOD() Oui (no) Partie entière (inférieure)
Logo (langage) MODULO Oui (no) Partie entière (inférieure)
REMAINDER Oui (no) Troncature
Lua (langage) 5 % Oui Oui Partie entière (inférieure)
Lua (langage) 4 mod(x,y) Oui Oui Troncature
Liberty BASIC (en) MOD Oui (no) Troncature
Mathcad mod(x,y) Oui (no) Partie entière (inférieure)
Maple e mod m (by default), modp(e, m) Oui (no) Euclidienne
mods(e, m) Oui (no) Arrondie
frem(e, m) Oui Oui Arrondie
Mathematica Mod Oui (no) Partie entière (inférieure)
MATLAB mod Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
Maxima (logiciel) mod Oui (no) Partie entière (inférieure)
remainder Oui (no) Troncature
Maya Embedded Language % Oui (no) Troncature
Microsoft Excel =MOD() Oui Oui Partie entière (inférieure)
Minitab MOD Oui (no) Partie entière (inférieure)
Modula-2 MOD Oui (no) Partie entière (inférieure)
REM Oui (no) Troncature
MUMPS # Oui (no) Partie entière (inférieure)
Netwide Assembler (NASM, NASMX) %, div (unsigned) Oui (no) NC
%% (signed) Oui (no) Dépends de l'implémentation
Nim (langage) mod Oui (no) Troncature
Oberon (langage) MOD Oui (no) Proche de Partie entière (inférieure)
Objective-C % Oui (no) Troncature (identique à C99)
Object Pascal, Delphi (langage) mod Oui (no) Troncature
OCaml mod Oui (no) Troncature
mod_float (no) Oui Troncature
Occam (langage) \ Oui (no) Troncature
Pascal (langage) (ISO-7185 and -10206) mod Oui (no) Proche de l'Euclidienne
Perl (langage) % Oui (no) Partie entière (inférieure)
POSIX::fmod (no) Oui Troncature
Phix mod Oui (no) Partie entière (inférieure)
remainder Oui (no) Troncature
PHP % Oui (no) Troncature
fmod (no) Oui Troncature
PIC BASIC Pro \\ Oui (no) Troncature
PL/I mod Oui (no) Partie entière (inférieure) (ANSI PL/I)
PowerShell % Oui (no) Troncature
Programming Code (PRC) MATH.OP - 'MOD; (\)' Oui (no) Undefined
Progress (Progress Software) modulo Oui (no) Troncature
Prolog (ISO 1995) mod Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
PureBasic %, Mod(x,y) Oui (no) Troncature
PureScript `mod` Oui (no) Euclidean
Pure Data % Oui (no) Troncature (same as C)
mod Oui (no) Partie entière (inférieure)
Python % Oui Oui Partie entière (inférieure)
math.fmod (no) Oui Troncature
Q# % Oui (no) Troncature
R (langage) %% Oui Oui Partie entière (inférieure)
Racket modulo Oui (no) Partie entière (inférieure)
remainder Oui (no) Troncature
Raku % (no) Oui Partie entière (inférieure)
RealBasic MOD Oui (no) Troncature
Reason mod Oui (no) Troncature
Rexx // Oui Oui Troncature
RPG %REM Oui (no) Troncature
Ruby %, modulo() Oui Oui Partie entière (inférieure)
remainder() Oui Oui Troncature
Rust % Oui Oui Troncature
rem_euclid() Oui Oui Euclidienne
SAS MOD Oui (no) Troncature
Scala % Oui Oui Troncature
Scheme modulo Oui (no) Partie entière (inférieure)
remainder Oui (no) Troncature
Scheme R6RS mod Oui (no) Euclidienne
mod0 Oui (no) Arrondie
flmod (no) Oui Euclidienne
flmod0 (no) Oui Arrondie
Scratch mod Oui Oui Partie entière (inférieure)
Seed7 mod Oui Oui Partie entière (inférieure)
rem Oui Oui Troncature
SenseTalk modulo Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
sh (POSIX) (includes bash, mksh, &c.) % Oui (no) Troncature (same as C)
Smalltalk \\ Oui (no) Partie entière (inférieure)
rem: Oui (no) Troncature
Snap! mod Oui (no) Partie entière (inférieure)
Spin // Oui (no) Partie entière (inférieure)
Solidity % Oui (no) Partie entière (inférieure)
SQL (SQL:1999) mod(x,y) Oui (no) Troncature
SQL (SQL:2011) % Oui (no) Troncature
Standard ML mod Oui (no) Partie entière (inférieure)
Int.rem Oui (no) Troncature
Real.rem (no) Oui Troncature
Stata mod(x,y) Oui (no) Euclidienne
Swift % Oui (no) Troncature
remainder(dividingBy:) (no) Oui Arrondie
truncatingRemainder(dividingBy:) (no) Oui Troncature
Tcl % Oui (no) Partie entière (inférieure)
fmod() (no) Oui Troncature (as C)
tcsh % Oui (no) Troncature
Torque % Oui (no) Troncature
Turing mod Oui (no) Partie entière (inférieure)
Verilog (2001) % Oui (no) Troncature
VHDL mod Oui (no) Partie entière (inférieure)
rem Oui (no) Troncature
VimL % Oui (no) Troncature
Visual Basic Mod Oui (no) Troncature
WebAssembly i32.rem_u, i64.rem_u (unsigned) Oui (no) NC
i32.rem_s, i64.rem_s (signed) Oui (no) Troncature
x86 assembly IDIV Oui (no) Troncature
XBase++ % Oui Oui Troncature
Mod() Oui Oui Partie entière (inférieure)
Zig %,

@mod, @rem

Oui Oui Troncature
Z3 theorem prover div, mod Oui (no) Euclidienne

Quelques détails concernant certains langages suivants la définition utilisant la partie entière inférieure

« si une horloge indique 10 heures, qu'indiquait-elle 200 heures avant ? -190 % 12 == 2 est utile ; -190 % 12 == -10 est un bug prêt à mordre. »

Quelques détails concernant certains langages suivants la définition utilisant la troncature

Si l'on souhaite utiliser le modulo dans sa définition partie entière inférieure pour l'un de ces langages on peut utiliser l'expression :

(a % n + n) % n

Valeur d'un modulo 0 (valeur 'zéro')

Dans la plupart des langages, l'opération modulo ne donne aucun résultat si le diviseur est nul, mais lance une exception arithmétique de division par zéro.

É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.

Notes et références

Notes

  1. Argument order reverses, i.e., α|ω computes ω mod α {\displaystyle \omega {\bmod {\alpha }}} , the remainder when dividing ω by α.
  2. C99 and C++11 define the behavior of % to be Troncature. The standards before then leave the behavior implementation-defined.
  3. Divisor must be positive, otherwise undefined.
  4. As discussed by Boute, ISO Pascal (langage)'s definitions of div and mod do not obey the Division Identity of D = d · (D / d) + D % d, and are thus fundamentally broken.
  5. Perl (langage) usually uses arithmetic modulo operator that is machine-independent. For examples and exceptions, see the Perl documentation on multiplicative operators.

Références

  1. « Fonction modulo », sur IBM.com
  2. Brian W. Kernighan et Denis M. Ritchie, Le Langage C : Norme Ansi, Dunod, 2000, p. 41 - Les opérateurs arithmétiques
  3. Ronald Graham, Donald Knuth et Oren Patashnik (trad. Alain Denise), Mathématiques concrètes : Fondations pour l'informatique, Paris, Vuibert, 2003, 2e éd., xiv+688 (ISBN 978-2-7117-4824-2), p. 88-89.
  4. Raymond T. Boute, « The Euclidean definition of the functions div and mod », ACM Transactions on Programming Languages and Systems, ACM Press (New York, NY, USA), vol. 1, no 2,‎ avril 1992, p. 127–144 (DOI 10.1145/128861.128862, lire en ligne), p. 128-129.
  5. Graham, Knuth et Patashnik 2003, p. 89, et note marginale p. 88.
  6. Graham, Knuth et Patashnik 2003, p. 88-89, pour l'opération binaire, p.143 pour la congruence. Les auteurs n'utilisent le terme modulo que pour la relation de congruence, mais nomment « mod » l'opération binaire.
  7. « ISO/IEC 8652:2012 - Information technology — Programming languages — Ada », ISO, IEC,‎ 2012, sec. 4.5.5 Multiplying Operators
  8. Depuis ISO C99. En ISO C90, en cas d'opérande négatif, le signe du résultat était défini par l'implémentation.
  9. « C99 specification (ISO/IEC 9899:TC2) », 6 mai 2005 (consulté le 16 août 2018), sec. 6.5.5 Multiplicative operators
  10. « ISO/IEC 14882:2003: Programming languages – C++ », International Organization for Standardization (ISO), International Electrotechnical Commission (IEC),‎ 2003, sec. 5.6.4 :

    « the binary % operator yields the remainder from the division of the first expression by the second. .... If both operands are nonnegative then the remainder is nonnegative; if not, the sign of the remainder is implementation-defined »

  11. « ISO/IEC 9899:1990: Programming languages – C », ISO, IEC,‎ 1990, sec. 7.5.6.4 :

    « The fmod function returns the value x - i * y, for some integer i such that, if y is nonzero, the result has the same sign as x and magnitude less than the magnitude of y. »

  12. (en-US) dotnet-bot, « Math.IEEERemainder(Double, Double) Method (System) » (consulté le 4 octobre 2022)
  13. « clojure.core - Clojure v1.10.3 API documentation » (consulté le 16 mars 2022)
  14. « clojure.core - Clojure v1.10.3 API documentation », sur clojure.github.io (consulté le 16 mars 2022)
  15. ISO/IEC JTC 1/SC 22/WG 4, ISO/IEC 1989:2023 – Programming language COBOL, ISO, janvier 2023 (lire en ligne Accès payant)
  16. CoffeeScript operators
  17. ISO/IEC JTC 1/SC 22, ISO/IEC 23271:2012 — Information technology — Common Language Infrastructure (CLI), ISO, février 2012 (lire en ligne), §§ III.3.55–56
  18. « Expressions - D Programming Language », sur dlang.org (consulté le 1er juin 2021)
  19. « operator % method - num class - dart:core library - Dart API », sur api.dart.dev (consulté le 1er juin 2021)
  20. « remainder method - num class - dart:core library - Dart API », sur api.dart.dev (consulté le 1er juin 2021)
  21. « Kernel — Elixir v1.11.3 », sur hexdocs.pm (consulté le 28 janvier 2021)
  22. « Integer — Elixir v1.11.3 », sur hexdocs.pm (consulté le 28 janvier 2021)
  23. « Basics - core 1.0.5 », sur package.elm-lang.org (consulté le 16 mars 2022)
  24. « Basics - core 1.0.5 », sur package.elm-lang.org (consulté le 16 mars 2022)
  25. « Erlang -- math », sur erlang.org (consulté le 1er juin 2021)
  26. ANSI, Programming Languages — Full BASIC, New York, American National Standards Institute, 28 janvier 1987 (lire en ligne), § 5.4.4 :

    « X modulo Y, i.e., X-Y*INT(X/Y). »

  27. ANSI, Programming Languages — Full BASIC, New York, American National Standards Institute, 28 janvier 1987 (lire en ligne), § 5.4.4 :

    « "The remainder function, i.e., X-Y*IP(X/Y)." »

  28. « GLSL Language Specification, Version 4.50.7 » : « If both operands are non-negative, then the remainder is non-negative. Results are undefined if one or both operands are negative. », section 5.9 Expressions
  29. « GLSL Language Specification, Version 4.50.7 », section 8.3 Common Functions
  30. « The Go Programming Language Specification - The Go Programming Language », sur go.dev (consulté le 28 février 2022)
  31. « math package - math - pkg.go.dev », sur pkg.go.dev (consulté le 28 février 2022)
  32. « big package - math/big - pkg.go.dev », sur pkg.go.dev (consulté le 28 février 2022)
  33. « 6 Predefined Types and Classes », sur www.haskell.org (consulté le 22 mai 2022)
  34. « Operators », Microsoft (consulté le 19 juillet 2021) : « The % operator is defined only in cases where either both sides are positive or both sides are negative. Unlike C, it also operates on floating-point data types, as well as integers. »
  35. « Mathematics · The Julia Language », sur docs.julialang.org (consulté le 20 novembre 2021)
  36. « Mathematics · The Julia Language », sur docs.julialang.org (consulté le 20 novembre 2021)
  37. (en) « rem - Kotlin Programming Language », sur Kotlin (consulté le 5 mai 2021)
  38. (en) « mod - Kotlin Programming Language », sur Kotlin (consulté le 5 mai 2021)
  39. « Chapter 3: The NASM Language », sur NASM - The Netwide Assembler version 2.15.05
  40. « OCaml library : Stdlib », sur ocaml.org (consulté le 19 février 2022)
  41. « OCaml library : Stdlib », sur ocaml.org (consulté le 19 février 2022)
  42. Perl documentation
  43. « PHP: Arithmetic Operators - Manual », sur www.php.net (consulté le 20 novembre 2021)
  44. « PHP: fmod - Manual », sur www.php.net (consulté le 20 novembre 2021)
  45. « EuclideanRing »
  46. (en-US) QuantumWriter, « Expressions », sur docs.microsoft.com (consulté le 11 juillet 2018)
  47. « R: Arithmetic Operators », sur search.r-project.org (consulté le 24 décembre 2022)
  48. « F32 - Rust »
  49. r6rs.org
  50. « Shell Command Language », sur pubs.opengroup.org (consulté le 5 février 2021)
  51. « Apple Developer Documentation », sur developer.apple.com (consulté le 20 novembre 2021)
  52. « Apple Developer Documentation », sur developer.apple.com (consulté le 20 novembre 2021)
  53. « Apple Developer Documentation », sur developer.apple.com (consulté le 20 novembre 2021)
  54. « WebAssembly Core Specification: Version 2.0 », World Wide Web Consortium, 19 avril 2022, § 4.3.2 Integer Operations
  55. « Zig Documentation », sur Zig Programming Language (consulté le 18 décembre 2022)
  56. "Why does -22 // 10 return -3?"
  57. (en) Michaël Van Canneyt, « Reference guide for Free Pascal, version 2.6.0 », décembre 2011.