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 :

Suite fibonacci incorrecte


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    cnam
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : cnam
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut Suite fibonacci incorrecte
    salut les amis

    je travaille avec code blocks 10.05
    le programme que j'ai ecrit est le suivant il permet de calculer une suite appelle fabinacci le probleme apparait au terme u[48] dans code blocks il donne une fausse resultat (deuxieme affichage)
    avec sourcelair il donne une affichage correcte (premier affichage)
    j'ai essayer de changer le type de variable et du pointeur le probleme persiste
    est ce que vous pouvez m'aviser
    merci beaucoup


    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
    #include <stdio.h>
     
    void main()
    {
        int i,n;
     
        long unsigned int *u;
     
        printf("donner n:");
        scanf("%d",&n);
        u=(long unsigned*)malloc(n*sizeof(long unsigned int));
        u[0]=0;
        u[1]=1;
        for(i=2; i<=n; ++i)
        {
     
            u[i]=u[i-1]+u[i-2];
        }
        for(i=0; i<=n; i++)
            printf("u[%d]=%lu\n",i,u[i]);
     
    }
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    donner n:49
    u[0]=0
    u[1]=1
    u[2]=1
    u[3]=2
    u[4]=3
    u[5]=5
    u[6]=8
    u[7]=13
    u[8]=21
    u[9]=34
    u[10]=55
    u[11]=89
    u[12]=144
    u[13]=233
    u[14]=377
    u[15]=610
    u[16]=987
    u[17]=1597
    u[18]=2584
    u[19]=4181
    u[20]=6765
    u[21]=10946
    u[22]=17711
    u[23]=28657
    u[24]=46368
    u[25]=75025
    u[26]=121393
    u[27]=196418
    u[28]=317811
    u[29]=514229
    u[30]=832040
    u[31]=1346269
    u[32]=2178309
    u[33]=3524578
    u[34]=5702887
    u[35]=9227465
    u[36]=14930352
    u[37]=24157817
    u[38]=39088169
    u[39]=63245986
    u[40]=102334155
    u[41]=165580141
    u[42]=267914296
    u[43]=433494437
    u[44]=701408733
    u[45]=1134903170
    u[46]=1836311903
    u[47]=2971215073
    u[48]=4807526976
    u[49]=7778742049
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    donner n:49
    u[0]=0
    u[1]=1
    u[2]=1
    u[3]=2
    u[4]=3
    u[5]=5
    u[6]=8
    u[7]=13
    u[8]=21
    u[9]=34
    u[10]=55
    u[11]=89
    u[12]=144
    u[13]=233
    u[14]=377
    u[15]=610
    u[16]=987
    u[17]=1597
    u[18]=2584
    u[19]=4181
    u[20]=6765
    u[21]=10946
    u[22]=17711
    u[23]=28657
    u[24]=46368
    u[25]=75025
    u[26]=121393
    u[27]=196418
    u[28]=317811
    u[29]=514229
    u[30]=832040
    u[31]=1346269
    u[32]=2178309
    u[33]=3524578
    u[34]=5702887
    u[35]=9227465
    u[36]=14930352
    u[37]=24157817
    u[38]=39088169
    u[39]=63245986
    u[40]=102334155
    u[41]=165580141
    u[42]=267914296
    u[43]=433494437
    u[44]=701408733
    u[45]=1134903170
    u[46]=1836311903
    u[47]=2971215073
    u[48]=512559680
    u[49]=3483774753

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    c'est normal, apparemment ton unsigned long int est codé sur 32 bits donc il ne pourra pas contenir un nombre plus grand que 4294967295 or u[48]=4807526976>4294967295.
    Suivant ta plateforme et ton compilateur tu peux essayer le type unsigned long long qui peut être un entier 64bit et contenir n'importe quel entier positif inférieur ou égal à 18446744073709551615. Cela sera suffisant jusqu'à u[93]=12200160415121876738 et tu te trouveras face au même problème pour u[94]=19740274219868223167. Pour aller au-delà il va falloir utiliser une bibliothèque de calcul en précision arbitraire et là tu sera limité par la capacité mémoire de ta machine.

    En passant il y a une erreur dans ton programme. Si tu utilises un tableau de u[0] à u[n] alors il y a n+1 éléments -> ton malloc devrait allouer n+1 éléments et non n :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    u=malloc((n+1)*sizeof(long unsigned int));

  3. #3
    Membre averti
    Homme Profil pro
    cnam
    Inscrit en
    Avril 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : cnam
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 14
    Par défaut
    merci beaucoup
    c'est exactement la réponse que je cherche
    et tu as raison avec l'allocation j'ai l'ai corrigée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Obtention d'un résultat incorrect suite à un SUM
    Par Angelik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 16/02/2008, 14h45
  2. Suite de Fibonacci parallélisée
    Par nicolas66 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 07/12/2006, 22h04
  3. Réponses: 6
    Dernier message: 01/12/2006, 17h32
  4. [NASM] Problème suite de Fibonacci
    Par empochez dans le forum Assembleur
    Réponses: 1
    Dernier message: 05/04/2006, 11h17
  5. Suite de Fibonacci
    Par Évariste Galois dans le forum C++
    Réponses: 13
    Dernier message: 22/07/2005, 21h21

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