Modulo ? (informatique vs mathématique)

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 05:21

Modulo ? (informatique vs mathématique)

par TheReveller » 29 Mar 2009, 23:10

Bonjour,

J'aimerais savoir ce que représente vraiment le modulo et si c'est vraiment différent dans le monde informatique et dans le monde mathématique.

Je me sens un peu paresseux et je vais plutôt vous rediriger vers ce lien où j'explique mon problème :

http://www.autoitscript.com/forum/index.php?showtopic=92215

Merci de m'éclaircir.



uztop
Membre Complexe
Messages: 2396
Enregistré le: 12 Sep 2007, 12:00

par uztop » 30 Mar 2009, 00:50

Salut,

en quel langage est ce que tu utilises la fonction Mod ?
En C par exemple, la fonction modulo (%) se comporte exactement comme en maths et retourne des valeurs positives.
Le mieux serait probablement de lire la doc de la fonction que tu utilises.

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 05:21

par TheReveller » 30 Mar 2009, 05:14

Les développeurs du programme que j'utilise ont dit qu'ils se sont basés sur les langages les plus courrants pour la fonction Mod() et pourtant ça retourne des valeurs négatives.

Aussi, essayez la calculatrice de l'ordinateur et vous verrez qu'elle renvoie les mêmes valeurs que celui du langage informatique...

D'ailleurs, j'ai un bonne calculatrice qui me retourne des valeurs négatives dans certains cas, comme j'ai dit ici :

Computer language says :

Mod(8, 5) = 3
Mod(-8, 5) = -3
Mod(8, -5) = 3
Mod(-8, -5) = -3

My function says :

Mod(8, 5) = 3
Mod(-8, 5) = 2
Mod(8, -5) = 2
Mod(-8, -5) = 3

My 300$ calculator says :

Mod(8, 5) = 3
Mod(-8, 5) = 2
Mod(8, -5) = -2
Mod(-8, -5) = -3

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 15:36

par abcd22 » 30 Mar 2009, 19:39

TheReveller a écrit:Mod(8, -5) = 2
Mod(-8, -5) = 3

Erreur de copie ou dans la fonction ?

Le reste de la division euclidienne est toujours positif par définition, ici les valeurs correctes pour les restes sont :
remainder(8, 5) = 3
remainder(-8, 5) = 2 (-8 = (-2) × 5 + 2)
remainder(8, -5) = 3 (8 = (-1) × (-5) + 3)
remainder(-8, -5) = 2 (-8 = 2 × (-5) + 2)
Pour Mod(a, b) c'est une question de convention, si r est le reste de la division euclidienne de a par b, n'importe quel entier de la forme r + nb (avec n un entier relatif) est valable, mais en général on choisit Mod(a, b) tel que 0 .

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 05:21

par TheReveller » 31 Mar 2009, 01:05

Non, ce n'est pas une erreur, c'est voulu.

J'ai pour :

x = -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ,10

La valeur retournée par le langage informatique pour Mod(x, 6) et Mod(x, -6) :

-4, -3, -2, -1, -0, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4
-4, -3, -2, -1, -0, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4

Ma calculatrice me répondrait plutôt :

2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4
-4, -3, -2, -1, 0, -5, -4, -3, -2, -1, 0, -5, -4, -3, -2, -1, 0, -5, -4, -3, -2

Le reste selon ta définition serait :

2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4
2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4

Et moi j'ai défini par le langage informatique une fonction _Mod(x, y) = Abs(Mod(Mod(x, y)+y, y), ce qui me renvoie :

2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4
4, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0, 5, 4, 3, 2

Ce qui m'est utile pour établir une boucle continue quelque soit la valeur de x. Avec ça, que j'incrémente le x jusqu'à l'infini ou moins l'infini, la boucle sera toujours la même et si mon y est négatif, c'est la même chose, mais décroissant.

L'utilité la plus basique : J'ai un tableau de 10 éléments de t[0] à t[9] et une variable p qui me positionne dans ce tableau pour me renvoyer l'élément t[p]. En incrémentant p, l'élément suivant t[9] sera t[0] tandis qu'en décrémentant p, l'élément précédent t[0] sera t[9].

Merci pour ces éclaircissements à propos du reste et du modulo. Je comprends donc que pour ce qui est du modulo, il faut toujours le tester avant de l'utiliser puisqu'il peut être défini sous différentes conventions, tandis que le reste est toujours une valeur positive.

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 15:36

par abcd22 » 31 Mar 2009, 02:11

TheReveller a écrit:Et moi j'ai défini par le langage informatique une fonction _Mod(x, y) = Abs(Mod(Mod(x, y)+y, y), ce qui me renvoie :

2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4
4, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0, 5, 4, 3, 2, 1, 0, 5, 4, 3, 2

Mais ta fonction ne renvoie pas toujours un nombre qui est congru à x modulo y. Si tu veux construire une fonction qui renvoie un nombre toujours positif (c'est-à-dire le reste au sens de la division euclidienne) à partir de la fonction Mod de ton langage de programmation, il faut renvoyer Mod(x, y) si x est positif et Mod(x, y) + |y| si x est négatif (Mod(x, y) + |y| est forcément positif car |Mod(x, y)| < |y|).

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 05:21

par TheReveller » 31 Mar 2009, 04:23

Je sais, mais c'est voulu.

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 15:36

par abcd22 » 31 Mar 2009, 13:53

TheReveller a écrit:Je sais, mais c'est voulu.

Tu as écrit « en décrémentant p, l'élément précédent t[0] sera t[9] », mais avec ta fonction l'élément précédent t[0] est t[_Mod(-1, 10)] = t[1].

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 05:21

par TheReveller » 31 Mar 2009, 14:29

_Mod(x, y) = Abs(Mod(Mod(x, y)+y, y))

_Mod(-1, 10) = Abs(Mod(Mod(-1, 10)+10, 10)) où selon le langage informatique Mod(-1, 10) = -1

_Mod(-1, 10) = Abs(Mod(-1+10,10))
_Mod(-1, 10) = Abs(Mod(9,10))
_Mod(-1, 10) = Abs(9) = 9

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 15:36

par abcd22 » 31 Mar 2009, 18:33

Je ne sais pas ce que tu as fait, mais ce n'est pas la même chose que dans l'exemple que tu as donné quelques messages plus haut.

TheReveller
Membre Relatif
Messages: 114
Enregistré le: 14 Nov 2006, 05:21

par TheReveller » 31 Mar 2009, 19:01

Quel exemple ?

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 16:25

par leon1789 » 03 Avr 2009, 21:10

uztop a écrit:En C par exemple, la fonction modulo (%) se comporte exactement comme en maths et retourne des valeurs positives.

Modulo n'a pas la même signification en informatique et en math :hum: :hum:
en info, mod est une fonction (opérateur binaire) , ok ;
en math, c'est un concept plus abstrait... groupe quotient...

Prenons un exemple : lis la phrase suivante avec p = 7

if (p-1)! = -1 mod p then print(p) else print(0)

si tu es un matheux alors tu écris "7" après avoir lu la phrase ;
si tu es un informaticien alors tu écris "0" ! :id:

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 9 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite