Le Blog de SamsamTS

Mot du lot

Dans la plupart des langages de programmation il existe un opérateur magique, le modulo. Assez méconnu des débutants, cet opérateur permet pourtant bien des choses qui autrement seraient parfois bien compliqués.
Voici quelques-uns de ses usages :

Avant de commencer je vais expliquer ce que fais cet opérateur exactement.
Prenons un exemple : 11 modulo 4 = 3.
Pourquoi ce résultat ? Et bien c'est le reste de la division entière de 11/4. En détail,
:arrow: division entière de 11/4 = 2
:arrow: 2*4 = 8
:arrow: 11-8 = 3.

Multiple d'un nombre

L'une des premières applications permet de détermnier si X est un multiple de Y.
Essayer par vous même 12 modulo 4, 63 modulo 9, etc... On remarque que le résultat est toujours 0, ce qui est logique en regardant la formule ci-dessus.

Tronquer un nombre

L'une des autres particularités de cette opérateur est que le résultat de X modulo Y sera toujours inférieur à Y.
Mais pas n'importe comment, prenons un exemple : 3526 modulo 1000 = 526 :arrow: les milliers on été tronqués. Cela peut s'avérer utile avec l'utilisation conjointe de la division entière :
3526 / 1000 = 3
(3526 % 1000) / 100 = 5
(3526 % 100) / 10 = 2
3526 % 10 = 6
Ainsi l'on peut récupérer n'importe quel chiffre du nombre.

Buffer circulaire

Admettons que l'on veuille utiliser un tableau de longueur N en insérant des valeurs au fur et à mesure à l'indice suivant (commencent à zéro) du tableau ET que lorqu'il n'y a plus de place on reécrit au début.
Sans le modulo il faudrait tester à chaque incrémentation si l'indice est égal à N et le cas échéant le remettre à zéro.
Avec le modulo l'incrémentation se fait différemment : indice = (indice + 1) % N. Grâce au modulo, l'indice sera toujours inférieur à N, mais aussi quand (indice + 1) vaut N alors (indice + 1) est multiple de N donc le résultat est 0.

Voilà pour les bases sur l'utilisation du modulo, alors lorsque vous manipulez des nombres (entiers) pensez toujours au modulo magique  8)

Vos commentaires

Le mercredi 22 février 2006 à 12:13 , commentaire par LAlex :: #

 

Une petite astuce pour borner un nombre entre 0 et n (je l'utilise pour les angles entre 0 et 360) :

Code :

var simpleAngle:Number = ((angle % 360) + 360) % 360)


++ ^_^

 

Le mercredi 22 février 2006 à 14:32 , commentaire par SamsamTS :: #

 

Oui j'avais vu ça sur ton blog, ça m'avait même paru bizarre de faire 2 fois le modulo, alors qu'effectivement pour les nombres négatifs c'est nécessaire.

Il existe une autre solution mais est-ce plus performant ?

Code :

var simpleAngle:Number = (angle>=0) ? angle%360 : (angle%360) + 360;

 

Le mercredi 22 février 2006 à 16:13 , commentaire par Ethinil :: #

 

Salut!
Merci pour le cours de modulo!
Mais je comprends pas encore trop comment l'utiliser par exemple si je veux faire un truc genre:
quand 216 est divisible par 6 alors fait ceci
quand 216 est divisible par 18 alors fait ceci
quand 216 est divisible par 108 alors fait ceci
pour le moment je fais plein d'if partout du style si i==6 alors... et en remettant ce i a 0 a chaque fois  :s

ps: je ferais mieux de poster ca sur un forum plutot qu'ici, d'un autre coté ca peut agrementer ton cours de répondre :) ;)

 

Le mercredi 22 février 2006 à 17:11 , commentaire par SamsamTS :: #

 

Comme je l'ai dit le modulo peut servir à tester si un nombre est multiple d'un autre :

Code :

if(X%6 == 0)
{
  // X est multiple de 6
}

 

Le vendredi 3 mars 2006 à 22:14 , commentaire par klee :: email :: #

 

merci !  :D

 

Le mercredi 15 mars 2006 à 11:29 , commentaire par Lasouche :: email :: #

 

Salut,

Moi je l'utilise pour faire un affichage de x ligne et x colonne de thumbs par exemple

si valeur restante du module == 0 => va à la ligne

++

 

Le mercredi 3 mai 2006 à 15:32 , commentaire par craps :: #

 

c'est pas mal aussi pour exécuter qqch toutes les n intervalles, n étant une fréquence et 'intervalles' au choix une boucle, un framerate, etc. ;)

 

Le samedi 1 octobre 2011 à 00:52 , commentaire par casino en ligne francais :: email :: #

 

Je suis très intéressé par ce domaine et la lecture de ce post, je connais beaucoup de nouvelles choses, dont je n'ai pas connu avant. Merci de publier cet excellent article ici.

 

Ajouter un commentaire