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

C Discussion :

Résultat de %


Sujet :

C

  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Résultat de %
    Je suis surpris, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    include <stdio.h>
     
    int main()
    {
    	signed short i=0,z;
     
     
    	while (i<40)
    	{
    	 z=(20-i)%10;
    	 printf("%hd => %hd\n",i,z);
    	 i++;
    	}
     
    	return 0;
    }
    Voici la sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    0 => 0
    1 => 9
    2 => 8
    3 => 7
    4 => 6
    5 => 5
    6 => 4
    7 => 3
    8 => 2
    9 => 1
    10 => 0
    11 => 9
    12 => 8
    13 => 7
    14 => 6
    15 => 5
    16 => 4
    17 => 3
    18 => 2
    19 => 1
    20 => 0
    21 => -1
    22 => -2
    23 => -3
    24 => -4
    25 => -5
    26 => -6
    27 => -7
    28 => -8
    29 => -9
    30 => 0
    31 => -1
    32 => -2
    33 => -3
    34 => -4
    35 => -5
    36 => -6
    37 => -7
    38 => -8
    39 => -9
    Je m'attendais à des nombres entre 0 et 9 !
    C'est un gag de moi ou de mon compilo ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par troumad
    Je m'attendais à des nombres entre 0 et 9 !
    C'est un gag de moi ou de mon compilo ?
    Oui je crois que ça vient de toi....

    Tu as bien des nombres entre 0 et 9... De quoi te plains-tu?
    Je ne vois pas où est le pb....

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    % c'est l'opérateur modulo, c'est donc normal que z soit entre 0 et 9 !
    sinon renseignes-toi plutôt sur ce que fait l'opérateur modulo.

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Vous n'avez pas vu la fin de la sortie : ce sont des nombres entre 0 et -9. Mon problème est là...
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #5
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par troumad
    Vous n'avez pas vu la fin de la sortie : ce sont des nombres entre 0 et -9. Mon problème est là...
    Un nb modulo un nb négatif donne un résultat négatif !!! Ca ne me choque pas trop...

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par crocodilex
    Un nb modulo un nb négatif donne un résultat négatif !!! Ca ne me choque pas trop...
    Moi non plus, mais ça me gène... Ça ne donne pas une fonction périodique et d'un point de vu mathématique, j'aurais dit que le reste était en 0 et le diviseur, donc le modulo ne peut être considéré comme le reste de la division.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    oui, ça m'est revenu pendant la douche que tu avais z qui devait sûrement passer négatif à un moment, et que je n'avais pas vu tout ton extrait... désolé.

    donc un nombre z modulo i est le reste de la division de z par i.

    pour moi le quotient (ça se dit comme ça ?) de -20 divisé par 6 = -18, il "reste" -2 pour arriver à -20, donc ça ne me choque pas.

    un matheux dans le coin ???

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    oulaaaah le quotien est bien sûr -3 !!!

    -18 est le 6 * ce quotient

  10. #10
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par benhoeil
    un matheux dans le coin ???
    Je suis prof de math, mais je n'ai pas fait d'étude en math...
    J'ai toujours vu ça avec des nombres positifs, donc l'extrapolation au nombres négatifs n'a pas l'air claire.

    Pour être sur, je mettrais alors ((a%b)+b)%b => Le résultat sera entre 0 (large) et b (strict).
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  11. #11
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    il "reste" -2 pour arriver à -20, donc ça ne me choque pas.
    Du point de vue de ce qu'on m'apprend en maths, moi ça me choque :
    le reste d'une division euclidienne doit toujours être positif ou nul, et inférieur au diviseur.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Citation Envoyé par odsen.s
    le reste d'une division euclidienne doit toujours être positif ou nul, et inférieur au diviseur.
    http://fr.wikipedia.org/wiki/Division_euclidienne

    et je cite :

    La division euclidienne ou division entière est une opération qui, à deux entiers naturels appelés dividende et diviseur, associe deux entiers appelés quotient et reste. Initialement définie aux entiers naturels non nuls, elle se généralise aux entiers relatifs et aux polynômes, par exemple.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Citation Envoyé par troumad
    Je suis prof de math, mais je n'ai pas fait d'étude en math...
    !!!

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    je reprends mon bouquin de C (Kernighan et Ritchie) et il dit texto :

    L'opérateur % ne s'applique pas aux types float et double. Le sens de la troncature pour / (par défaut ou par excès), ainsi que le signe du résultat de %, dépendent de la machine dans le cas des opérandes négatifs.
    hmm... là je ne sais plus quoi penser, % n'implémenterait-il pas les règles de la division euclidienne dans Z ?

  15. #15
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    La réponse est donc claire et nette !
    Je mettrais donc ((a%abs(b))+abs(b))%abs(b)
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  16. #16
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    L'operateur % n'est pas modulo mais le reste de la division. La contrainte est que

    Après on a le choix pour la manière dont on passe d'un a/b non entier a une valeur entiere.
    - on peut arrondir; a ma connaissance personne ne propose cela.
    - on peut prendre l'entier inferieur ou egal au resultat. Dans ce cas, % correspond au modulo et on a le signe de a %b qui est le signe de b.
    - on peut prendre l'entier le plus proche du resultat reel en direction de 0. Dans ce cas, on a le signe de a%b qui est le signe de a et on a conserve des egalites du genre (-a)/b = -(a/b) = (a/-b).

    La difference entre les deux n'intervient que quand au moins un des arguments est negatif.

    Traditionnellement, le C n'impose pas un comportement pour permettre d'utiliser ce que fournit le processeur sans ajustement. En pratique les processeurs utilisent la troisieme methode, peut-etre parce que c'est celle imposee par le Fortran, et C99 impose ce comportement.

    D'apres mon experience, pour la division on veut generalement le 3 ieme comportement. Il est rare d'avoir besoin du % pour des arguments negatifs et dans ce cas une fois sur deux a peu pres le comportement qu'il faut est celui qu'on a.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    L'operateur % n'est pas modulo mais le reste de la division.
    Si c'est l'opérateur de modulo, et il est défini comme le reste de la division... blabla. Bon après c'est n'est que jouer avec les mots, mais si je suis très strict et si j'ai bien lu et recoupé mes sources d'informations, c'est ça.

  18. #18
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par benhoeil
    Si c'est l'opérateur de modulo, et il est défini comme le reste de la division... blabla. Bon après c'est n'est que jouer avec les mots, mais si je suis très strict et si j'ai bien lu et recoupé mes sources d'informations, c'est ça.
    Verifie tes sources.

    Citation Envoyé par ISO-9899-1999
    The result of the / operator is the quotient from the division of the first operand by the second; the result of the % operator is the remainder. In both operations, if the value of the second operand is zero, the behavior is undefined.
    Modulo n'apparait nulle part dans le texte de la norme en relation avec %.

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    mes sources :
    K&R
    wikipédia.

    sur wikipédia on parle de modulo informatique défini comme le reste de la divisioin euclidienne.

    je cite l'article :

    Ainsi, en programmation informatique, on désigne par modulo l'opération de calcul du reste de la division euclidienne. Si a est un entier quelconque et n un entier strictement positif, on écrira a mod n pour représenter le reste dans {0, ..., n−1} de la division de a par n. Par exemple, 26 mod 12 = 2.
    et mon K&R (pour moi c'est une bonne référence sinon LA référence, même si on dit que la norme fait autorité blabla) dit texto :

    Les opérateurs arithmétiques binaires sont... ,et l'opérateur de modulo, %.
    La traduction est peut être mauvaise, ce dont je doute.

  20. #20
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par benhoeil
    mes sources :
    K&R
    wikipédia.[

    sur wikipédia on parle de modulo informatique défini comme le reste de la divisioin euclidienne.

    je cite l'article :



    et mon K&R (pour moi c'est une bonne référence sinon LA référence, même si on dit que la norme fait autorité blabla) dit texto :
    Tu es tres strict mais tu preferes la traduction d'un (bon) livre ecrit comme un manuel et non une reference (donc avec un langage qui ne se veut pas tout le temps le plus precis possible) et un article wikipedia au texte de la norme. A chacun ses exigences.

    La traduction est peut être mauvaise, ce dont je doute.
    On ne m'a pas rendu mon exemplaire de K&R et je ne peux pas verifier le texte originel. Mes experiences avec les traductions de textes techniques sont plutot mauvaises.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Le résultat de Print ne s'affiche pas...
    Par Red Bull dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2006, 18h56
  2. [requête]donner résultat que si + de n lignes...
    Par Titia765 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 10/06/2003, 12h02
  3. Réponses: 3
    Dernier message: 18/05/2003, 00h16
  4. Réponses: 4
    Dernier message: 28/09/2002, 00h00
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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