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 :

arrondis non voulu fait par l'ordinateur


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut arrondis non voulu fait par l'ordinateur
    Bonjour... J'ai un projet à faire en langage C et je n'arrive pas à résoudre mon problème:

    je dois réussir à faire une division ou l'on trouve un nombre infinit de décimal... (elle doit s'arrêté à un rang donné).
    Grâce à une boucle mon programme fonctionne mais le problème est que l'ordinateur, au bout d'un nombre trop élevé de décimal, fait l'arrondis de ce nombre et donc ne permet pas la progression...

    Si quelqu'un à une idée...

    Voici mon programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        partie_entier=a/b;
        partie_decimal= (a-b*partie_entier)/((double)b);
     
        for(i=0;i<=100;i++)
        {
            partie_decimal= 10*partie_decimal;
         }

  2. #2
    Membre régulier Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    Points : 98
    Points
    98
    Par défaut
    je suis pas sure de bien comprendre ce que vous voulez faire, mais je suppose qu il s agit des division type 10/3, vu ton code evidament que ca va pas marche puisque tu demande a l ordinateur de vous stocker 10^i dans partie_decimal apres i iteration, ce qui est impossible vu que le type float ne peut prendre plus de 4 octels, donc les calculs vont diverger des que 10^i depasse ce valeur et tu aura n'importe quoi comme resultat.
    Si tu peux mieux detailler ce que tu veux faire je pourrais mieux t aider

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    je suis désolé... c'est que le programme à un énnocé très long pour expliquer les consignes:
    On calcul en premier la partie entière, pour les nombres décimaux, le but est de les extraire un par un.
    Pour cela (d'après l'énnoncé) il faut *10 successivement le reste de la division précédente et de diviser par la partie entière... (je sais pas si c'est très clair). => le reste de cette division et de nouveau traité pr extraire le chiffre suivant!

    J'espère avoir été clair, merci beaucoup pr ton aide!

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je suppose que a et b sont des entiers dans ton exercice.
    Si tu veux que ça fonctionne, tu ne doit utiliser que des opérations entières, car dans ce cas, il n'y a pas d'erreur d'arrondi ou de troncature.
    On calcul en premier la partie entière,... (d'après l'énnoncé) il faut *10 successivement le reste de la division précédente et de diviser par la partie entière...
    il faut diviser par le même diviseur (b), pas par la partie entière

  5. #5
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void) {
        int a, b;
        int i, pe, r;
     
        a=10;
        b=3;
     
        pe = a / b;
        r = a % b;
        printf("partie entiere de %d / %d : %d\n",a,b,pe);
        for (i=0;i<100;i++) {
            pe = (10 * r) / b;
            r = (10 * r) % b;
            printf("%de chiffre apres la virgule de %d / %d : %d\n",i+1,a,b,pe);
        }
     
        return 0;
    }

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    ooo merci, je croyais que j''allais jamais réussir à résoudre ce problème !

    En réalité on me demande d'énumérer ces décimales... le principe doit être le même, seul l'ajout d'une variable doit changer mais je ne trouve pas comment. Si vous pouvez me guidé dans la voie sinon merci pr le reste, votre aide m'a été très utile...

  7. #7
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par Fredo123456 Voir le message
    En réalité on me demande d'énumérer ces décimales...
    ben il me semble que c'est ce que fait la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%de chiffre apres la virgule de %d / %d : %d\n",i+1,a,b,pe);
    toutes les décimales sont affichées une par une

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    excuse moi je me suis très mal exprimé.. le résultat doit s'afficher par exemple comme cela: 10/3=3,33333333333333
    Et non en disant le 1er chiffre après la virgule: 3
    deuxième:3
    ....
    Et pr cela je n'arrive pas du tt...

  9. #9
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    le résultat doit s'afficher par exemple comme cela: 10/3=3,33333333333333
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...   
        printf("%d/%d=%d,",a,b,pe);
        for (i=0;i<100;i++) {
            pe = (10 * r) / b;
            r = (10 * r) % b;
            printf("%d",pe);
        }
    ....

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Super sa marche... Merci beaucoup!!

Discussions similaires

  1. Valeurs arrondies non voulues
    Par Defcon08 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/04/2014, 22h13
  2. fonction Date () non reconnue par certains ordinateurs
    Par gravier3000 dans le forum IHM
    Réponses: 1
    Dernier message: 23/09/2010, 14h56
  3. Picking: une sélection par défaut non voulue
    Par GLDavid dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/06/2008, 09h15
  4. Réponses: 3
    Dernier message: 27/06/2007, 22h44
  5. Arrondie non voulu
    Par Toff !!!!! dans le forum Access
    Réponses: 5
    Dernier message: 27/09/2005, 10h13

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