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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    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 éprouvé Avatar de siegfried64
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2007
    Messages : 78
    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 averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    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 confirmé
    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
    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 chevronné 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
    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 averti
    Inscrit en
    Novembre 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 30
    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...

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