modulo négatif?

modulo négatif? - C - Programmation

Marsh Posté le 25-05-2005 à 15:17:51    

Bonjour,
je voudrais savoir si on pouvais avoir des modulo négatif en C.
du style n mod 8 =-1
Merci d'avance.
@+

Reply

Marsh Posté le 25-05-2005 à 15:17:51   

Reply

Marsh Posté le 25-05-2005 à 15:19:13    

Euh.
Le modulo, c'est le reste d'une division. Alors, non, il ne peut pas être négatif, il est forcément supérieur ou égal à 0.


Message édité par Elmoricq le 25-05-2005 à 15:21:42
Reply

Marsh Posté le 25-05-2005 à 16:11:15    

Elmoricq a écrit :

Euh.
Le modulo, c'est le reste d'une division. Alors, non, il ne peut pas être négatif, il est forcément supérieur ou égal à 0.


dans la pratique, selon les implémentation, le cas du modulo négatif est à gérer.
D'après mes souvenirs, en C le modulo est négatif, mais cela reste à vérifier.
Il faut donc faire un test de signe puis ajuster.


Message édité par pains-aux-raisins le 25-05-2005 à 16:17:54
Reply

Marsh Posté le 25-05-2005 à 21:50:17    

mp3490 a écrit :

Bonjour,
je voudrais savoir si on pouvais avoir des modulo négatif en C.
du style n mod 8 =-1
Merci d'avance.
@+


-9 mod 8 = -1 !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-05-2005 à 22:14:27    

erreur, le modulo, ce n'est pas le reste de la division.
 

(remainder  10  3) ;; 1
(remainder  10 -3) ;; 1
(remainder -10 -3) ;; -1
(remainder -10  3) ;; -1
 
 
(modulo  10  3) ;; 1
(modulo  10 -3) ;; -2
(modulo -10 -3) ;; -1
(modulo -10  3) ;; 2

Reply

Marsh Posté le 25-05-2005 à 22:15:21    

Emmanuel Delahaye a écrit :

Comportement indéfini

sérieux ? ça m'étonne beaucoup ça

Reply

Marsh Posté le 25-05-2005 à 22:18:13    

Taz a écrit :

erreur, le modulo, ce n'est pas le reste de la division.
 

(remainder  10  3) ;; 1
(remainder  10 -3) ;; 1
(remainder -10 -3) ;; -1
(remainder -10  3) ;; -1
 
 
(modulo  10  3) ;; 1
(modulo  10 -3) ;; -2
(modulo -10 -3) ;; -1
(modulo -10  3) ;; 2



On m'aurait menti toute ma vie ? [:totoz]


---------------
[:whatde]
Reply

Marsh Posté le 25-05-2005 à 22:19:06    

Taz a écrit :

sérieux ? ça m'étonne beaucoup ça


Non. Post effacé après secouage de neurone.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-05-2005 à 22:22:28    

Sve@r a écrit :

-9 mod 8 = -1 !!!

http://fr.wikipedia.org/wiki/Arith [...] _modulaire
 
bon alors, n'étant pas matheux, je ne me suis jamais posé la question, % en C (et autre langage reprenant les mêmes opérateurs), c'est le modulo (congruence) ou le reste de la division euclidienne ?
 
 
edit : OK, Emmanuel, donc c'est bien le vrai modulo.


Message édité par Taz le 25-05-2005 à 22:23:29
Reply

Marsh Posté le 25-05-2005 à 22:23:56    

Emmanuel Delahaye a écrit :

Non. Post effacé après secouage de neurone.


n'efface pas tes messages s'il te plait.

Reply

Marsh Posté le 25-05-2005 à 22:23:56   

Reply

Marsh Posté le 25-05-2005 à 22:26:02    

la division euclidienne, c'est une opérations où les opérandes sont des entiers naturels. la congruence est une relation entre entiers relatifs
 
edit : (limite antiflood)
donc la fonction remainder, si elle est appliquée a des entiers relatifs, retourne (remainder a b) -> (* (signe a) (remainder (abs a) (abs b)), il me semble.


Message édité par Taz le 25-05-2005 à 22:30:10
Reply

Marsh Posté le 25-05-2005 à 22:33:31    

Taz a écrit :

n'efface pas tes messages s'il te plait.


Euh, pourquoi ? Pas la peine de laisser trainer une anerie...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-05-2005 à 22:35:18    

ben pour pouvoir suivre le fil de la discussion. si tu veux supprimer quelque chose, utilise la balise strike

Reply

Marsh Posté le 25-05-2005 à 22:38:09    

Taz a écrit :

ben pour pouvoir suivre le fil de la discussion. si tu veux supprimer quelque chose, utilise la balise strike


OKI.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-05-2005 à 02:18:39    

Taz a écrit :

erreur, le modulo, ce n'est pas le reste de la division.
 

(remainder  10  3) ;; 1
(remainder  10 -3) ;; 1
(remainder -10 -3) ;; -1
(remainder -10  3) ;; -1
 
 
(modulo  10  3) ;; 1
(modulo  10 -3) ;; -2
(modulo -10 -3) ;; -1
(modulo -10  3) ;; 2



 
quoi ça ?
 
en C :
 
-10%3==-1
&&
10%-3==1
 
donc c'est bien le reste de la division entière

Reply

Marsh Posté le 26-05-2005 à 02:32:16    

alias modulo exemple,
 
-2/3==-0,666666666666...
 
en C on tronque donc :
 
-2/3==0 reste -2
 
maintenant si on arrondissait :
 
-2/3==-1 reste 1
 

Reply

Marsh Posté le 26-05-2005 à 09:32:02    

ooops, je testé bêtement en python pour aller vite. Donc en C, c'est bien la division entière, mais en python, c'est bien le modulo mathématique.
 
Emmanuel > c'est pas un peu bordélique ça ?

Reply

Marsh Posté le 26-05-2005 à 09:34:05    

Taz a écrit :

ooops, je testé bêtement en python pour aller vite. Donc en C, c'est bien la division entière, mais en python, c'est bien le modulo mathématique.
 
Emmanuel > c'est pas un peu bordélique ça ?


Les joies des spécificités des langages :D

Reply

Marsh Posté le 26-05-2005 à 09:44:05    

ce que je comprends pas trop, c'est la mathématiciens qui poussent pour avoir le type complexe, mais si y a déjà pas tous les opérateurs ...

Reply

Marsh Posté le 26-05-2005 à 09:46:21    

Taz a écrit :

ooops, je testé bêtement en python pour aller vite. Donc en C, c'est bien la division entière, mais en python, c'est bien le modulo mathématique.
 
Emmanuel > c'est pas un peu bordélique ça ?


Seul compte ce qui est ecrit dans le document de définition du langage. Il faut parfois avaler quelques couleuvres...
Miam !
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 30-05-2005 à 15:37:30    

D'apres mes souvenirs de maths, le modulo est le reste de la division entiere de deux nombres (entiers), mais il n'a de sens que si les 2 opérandes sont positives.
 
Donc mathématiquement, -9 mod 8 n'as pas de sens.
 
(Information a verifier tout de meme  :sarcastic: )

Reply

Marsh Posté le 30-05-2005 à 16:28:19    

chicotruss a écrit :

D'apres mes souvenirs de maths, le modulo est le reste de la division entiere de deux nombres (entiers), mais il n'a de sens que si les 2 opérandes sont positives.
 
Donc mathématiquement, -9 mod 8 n'as pas de sens.
 
(Information a verifier tout de meme  :sarcastic: )


 
si, on peut généraliser la division euclidienne dans Z. Dans ce cas, a mod b peut être négatif si a est négatif. par contre b se doit d'être un naturel non nul.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed