IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Modulo négatif, opérateur %


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Modulo négatif, opérateur %
    Comme vous le savez peut être, l'opérateur % en Java, ne calcule pas le modulo, mais le reste de la division euclidienne.

    Pour a%b
    Si a >=0, pas de problème, % calcule bien le modulo
    Mais si a<0 , le résultat est négatif ! (Ce qui ne devrait pas être le cas du modulo)

    L'opérateur % est assez problématique, lors d'un calcul d'index dans un tableau "cyclique".

    J'ai cherché assez longtemps (sur internet) une "opération sur une seule ligne" qui fasse l'équivalent du modulo.
    Finalement, je suis tombé sur une formule toute bête :

    a mod b == (a % b + b) % b

    Je n'ai vu cette solution quasiment nul part.
    Elle pose un problème ?

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut Les maths sont tes amies
    Bonjour,

    Comme vous le savez peut être, l'opérateur % en Java, ne calcule pas le modulo, mais le reste de la division euclidienne.
    ...
    Mais si a<0 , le résultat est négatif ! (Ce qui ne devrait pas être le cas du modulo)
    Quelles sont tes sources pour écrire ca ?

    Pourrais tu nous rappeler les définitions mathématiques, dans l'ensemble des entiers naturels N puis dans l'ensemble des entiers relatifs Z, de :
    -- l'opérateur binaire modulo
    -- la division euclienne

    Puis faire le liens entre les deux ... ton sujet m'interresse bien puisque je compte implémenter cette opération ...

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par polymorphisme Voir le message
    Quelles sont tes sources pour écrire ca ?
    Java language specifications, section 15.17.3
    5%3 produces 2 (note that 5/3 produces 1)
    5%(-3) produces 2 (note that 5/(-3) produces -1)
    (-5)%3 produces -2 (note that (-5)/3 produces -1)
    (-5)%(-3) produces -2 (note that (-5)/(-3) produces 1)


    Si tu ne vois jamais d'implémentation de ton code, c'est que c'est souvent plus lisible et plus facile à faire de rester dans des entiers (et ça diminue le nombre d'opérations)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si tu ne vois jamais d'implémentation de ton code, c'est que c'est souvent plus lisible et plus facile à faire de rester dans des entiers (et ça diminue le nombre d'opérations)
    ?
    un peu de mal à comprendre là ^^

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    mal exprimé désolé, je réitère

    Si tu ne vois jamais d'implémentation de ton code, c'est que c'est souvent plus lisible et plus facile à faire de rester dans des nombres positifs (et ça diminue le nombre d'opérations) en ne travaillant que par des incrémentations dans les boucles. (Puisque souvent le modulo est utilisé par des boucles)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Dans mon cas, la décrémentation est utile :
    Je parcours un tableau contenant des File (obtenu en listant un dossier),
    en me décalant par rapport au File actuellement sélectionné (grâce à la molette de la souris : avant ou arrière).

    Comme "%" ne permet pas de traiter les modulo négatif, "(a % b + b) % b" m'est particulièrement utile.
    ça m'évite juste de devoir traiter manuellement 2 cas.

Discussions similaires

  1. opérateur modulo et printf
    Par binome-x dans le forum C
    Réponses: 3
    Dernier message: 13/08/2014, 11h47
  2. Opérateur Modulo avec float
    Par Vice555 dans le forum C++
    Réponses: 4
    Dernier message: 29/01/2014, 21h02
  3. Réponses: 4
    Dernier message: 16/02/2010, 12h05
  4. Opérateur modulo en informix
    Par GBAGO dans le forum Informix
    Réponses: 2
    Dernier message: 27/06/2006, 13h11
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo