Je ne comprends pas vraiment comment fonctionne le module de division. Je calculais 27 % 16
et je me suis retrouvé avec 11
et je ne comprends pas pourquoi.
Je n'arrive pas à trouver une explication en termes simples en ligne. Quelqu'un peut-il élaborer à un très haut niveau sur ce qui se passe ici?
Le résultat d'un division modulo est le reste d'un division entière des nombres donnés.
Cela signifie:
27 / 16 = 1, remainder 11
=> 27 mod 16 = 11
Autres exemples:
30 / 3 = 10, remainder 0
=> 30 mod 3 = 0
35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
La plupart des explications manquent une étape importante, comblons le vide en utilisant un autre exemple.
Compte tenu de ce qui suit:
Dividend: 16
Divisor: 6
La fonction de module ressemble à ceci:
16 % 6 = 4
Déterminons pourquoi.
Tout d’abord, effectuez division entière, qui est similaire à la division normale, à l’exception de tout nombre fractionnaire (reste.a.k.):
16 / 6 = 2
Ensuite, multipliez le résultat de la division ci-dessus (2
) avec notre diviseur (6
):
2 * 6 = 12
Enfin, soustrayez le résultat de la multiplication ci-dessus (12
) de notre dividende (16
):
16 - 12 = 4
Le résultat de cette soustraction, 4
, le reste , est le même résultat de notre module ci-dessus!
Peut-être que l'exemple avec une horloge pourrait vous aider à comprendre le modulo.
Une utilisation familière de l'arithmétique modulaire est son utilisation dans l'horloge de 12 heures, dans laquelle le jour est divisé en deux périodes de 12 heures.
Disons que nous avons actuellement cette fois: 15:00
Mais vous pouvez aussi dire qu'il est 15 heures
C'est exactement ce que modulo fait:
15 / 12 = 1, remainder 3
Vous trouvez cet exemple mieux expliqué sur wikipedia: Article de Wikipedia: Modulo
La formule simple pour calculer le module est la suivante: -
[Dividend-{(Dividend/Divisor)*Divisor}]
Donc, 27% 16: -
27- {(27/16) * 16}
27- {1 * 16}
Réponse = 11
Note:
Tous les calculs sont avec des entiers. Dans le cas d'un quotient décimal, la partie après la décimale doit être ignorée/tronquée.
par exemple: 27/16 = 1,6875 doit être pris comme 1 seulement dans la formule susmentionnée. 0.6875 est ignoré.
Les compilateurs de langages informatiques traitent également un entier avec une partie décimale (en tronquant après le point décimal)
L'opérateur de module prend une instruction de division et renvoie ce qui reste de ce calcul, les données "restantes", pour ainsi dire, telles que 13/5 = 2. Ce qui signifie qu'il en reste 3 ou restantes de ce calcul. Pourquoi? parce que 2 * 5 = 10. Ainsi, 13 - 10 = 3.
L'opérateur de module effectue tout ce calcul pour vous, 13% 5 = 3.
la division de module est simplement ceci: divise deux nombres et renvoie le reste seulement
27/16 = 1 avec 11 restants, donc 27% 16 = 11
idem 43/16 = 2 avec 11 restants, donc 43% 16 = 11 aussi
Très simple: a % b
est défini comme le reste de la division de a
par b
.
Voir le article de wikipedia pour plus d'exemples.
J'espère que ces étapes simples aideront:
20 % 3 = 2
20 / 3 = 6
; n'incluez pas le .6667
- ignorez-le simplement3 * 6 = 18
20 - 18 = 2
, qui est le reste du moduloJ'aimerais ajouter une dernière chose:
il est facile de calculer modulo lorsque le dividende est supérieur/diviseur
dividende = 5 diviseur = 3
5% 3 = 2
3)5(1
3
-----
2
mais que se passe-t-il si le diviseur est plus petit que le dividende
dividende = 3 diviseur = 5
3% 5 = 3 ?? Comment
En effet, puisque 5 ne peuvent pas diviser 3 directement, modulo sera ce que le dividende est
Plus facile lorsque votre nombre après la décimale (0.xxx) est court. Ensuite, tout ce que vous devez faire est de multiplier ce nombre par le nombre après la division.
Ex: 32 % 12 = 8
Vous faites 32/12=2.666666667
Ensuite vous jetez le 2
et vous concentrez sur le 0.666666667
0.666666667*12=8
<- C'est votre réponse.
(encore une fois, facile seulement quand le nombre après la virgule est court)
Disons que vous avez 17 mod 6.
quel total de 6 vous obtiendrez le plus proche de 17, ce sera 12 parce que si vous dépassez 12, vous aurez 18, ce qui est plus que la question de 17 mod 6. Vous prendrez alors 12 et moins de 17 qui vous donnera votre réponse, dans ce cas 5.
17 mod 6 = 5
La division de module vous donne le reste d'une division, plutôt que le quotient.
La division par module est assez simple. Il utilise le reste au lieu du quotient.
1.0833... <-- Quotient
__
12|13
12
1 <-- Remainder
1.00 <-- Remainder can be used to find decimal values
.96
.040
.036
.0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...
13/12 = 1R1, ergo 13% 12 = 1.
Il est utile de considérer le module comme un "cycle".
En d'autres termes, pour l'expression n % 12
, le résultat toujours sera <12.
Cela signifie que la séquence pour l'ensemble 0..100
pour n % 12
est la suivante:
{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}
Dans cette optique, le module, ainsi que ses utilisations, devient beaucoup plus clair.
La seule chose importante à comprendre est que le module (noté ici par% comme en C) est défini par le biais du euclidien division .
Pour deux entiers (d, q)
_, ce qui suit est toujours vrai :
d = ( d / q ) * q + ( d % q )
Comme vous pouvez le voir, la valeur de d%q
dépend de la valeur de d/q
. Généralement pour les entiers positifs, d/q
est tronqué vers zéro , par exemple 5/2 en donne 2, d'où:
5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1
Cependant, pour les entiers négatifs, la situation est moins claire et dépend de la langue et/ou de la norme. Par exemple, -5/2 peut renvoyer -2 (tronqué vers zéro comme avant) mais peut aussi renvoyer avec une autre langue).
Dans le premier cas:
-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1
mais dans le second:
-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1
Comme dit précédemment, souvenez-vous simplement de l'invariant , qui est la division euclidienne .
Détails supplémentaires:
Ecrivez un tableau commençant par 0.
{0,1,2,3,4}
Continuer la table en lignes.
{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}
Tout dans la première colonne est un multiple de 5. Tout dans la deuxième colonne est un multiple de 5 avec 1 comme reste. Maintenant la partie abstraite: Vous pouvez écrire cela (1) en 1/5 ou en tant qu’expansion décimale. L'opérateur de module ne renvoie que la colonne ou, d'une autre façon de penser, il renvoie le reste lors d'une longue division. Vous avez affaire à modulo (5). Module différent, table différente. Pensez à une table de hachage.
C'est simple, l'opérateur Modulus (%) renvoie le reste après la division entière. Prenons l'exemple de votre question. Comment 27% 16 = 11? Lorsque vous divisez simplement 27 par 16, c'est-à-dire (27/16), vous obtenez le reste sous la forme 11, raison pour laquelle votre réponse est 11.
Lorsque nous diviserons deux entiers, nous obtiendrons une équation semblable à celle-ci:
A/B = Q reste R
A est le dividende; B est le diviseur; Q est le quotient et R le reste
Parfois, nous ne nous intéressons qu'au contenu du reste lorsque nous divisons A par B. Pour ces cas, il existe un opérateur appelé opérateur modulo (abrégé en mod).
Exemples
16/5= 3 Remainder 1 i.e 16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.
Voir Article de la Khan Academy pour plus d'informations.
En informatique, la table de hachage utilise l'opérateur Mod pour stocker l'élément où A correspond aux valeurs après hachage, B à la taille de la table et R au nombre d'emplacements ou de clés dans lesquels l'élément est inséré.
Voir Comment fonctionne une table de hachage pour plus d'informations