Suite de Fibonacci

Signaler
Messages postés
44
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
17 avril 2015
-
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Bonjour tout le monde je suis en train d'élaborer un programme qui simule une suite de Fibonacci et quand j'execute le programme il m'affiche des résultats négatifs à partir du 60e terme par là ,est-ce normal ?

Je ne pense pas donc j'aimerais bien si possible avoir une astuce pour outre passer ce problème :)

Merçi d'avance pour votre aide.

10 réponses

Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
En effet c'est pas normal :)
faut savoir qu'avec certain type de variable (int, float, double), les valeurs sont limitées.

Tu dois certainement utilisé un type de variable pas assez fort.

#include
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Si tu obtien des nombres négatifs après un certain temps, c'est certainement parce que tu utilise une variable signé. La limite d'une variable signé codé sur 32 bits est 2147483647 je crois. Pour une variable non signé c'est 4294967295.

Quoi qu'il en soit, on ne peut pas aller plus haut que ces limites avec une variable 32 bits (int, long). Va falloir travailler directement en mémoire. Fait une rechercehe sur ce site, il y a des exemples de ce genre.

C++ (@++)
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Le truc c'est que la suite de Fibonacci ne prend jamais des valeurs énorme.

D'ailleurs elle est croissante et tend vers le nombre d'or 1.619 donc je ne vois pas trop en fait le rapport avec les grands nombres.
#include
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
heu tu dois confondre avec une autre suite en rapport avec fibonacci car la suite de fibonacci c'est
u0 = 1, u1=1, u(n+1) = u(n) + u(n-1)
il existe aussi l'ensemble des suites u(n+1) = u(n) + u(n-1) avec u(i) et u(i+1) fixés

la croissance de ces suites est de type exponentielle
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Je crois joky que ce qui tend vers le nombre d'or, c'est quand on divise le nombre actuel que l'on obtien avec la suite de fibo par le précédent obtenue.

C++ (@++)
Messages postés
44
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
17 avril 2015

J'ai effectivement trouvé une piste du côté d'une bibliothèque nommé "gn.h"
Le problème est que j'ai du mal à l'utiliser dans un de mes programmes en l'occurence mon fameux programme qui simule une suite de Fibonacci.

Qui plus est les commandes que l'on propose pour compiler la bibliothèque sont des commandes unix y aurait-il un moyen pour compiler cette bibliothèque sur DEV-C++ ?

Merçi d'avance.
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Et j'suis bientot en 3année de licence de maths lol
Tristesse !
La suite de Fibonacci c'est là suite qu'on obtient en additionnant les deux termes précédents. Donc oui problème de "profondeur" avec les variables.
#include
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Un résultat négatif est absolument faux, si tu parts avec deux termes U0 et U1 dont la somme est >= 0.

Historiquement, cette suite est utilisée pour compter le nombre de lapins qu'on peut obtenir en faisant l'accouplement des individus de la génération (n-1) et (n-2), donc c'est logique que cette suite est toujours > 0.

U0 = 1
U1 = 1
Un = U(n-1) + U(n-2)

// Version récursive
int Fib (int n) {
   if (n <= 1) {
      return 1;
   }
   return Fib (n-1) + Fib (n-2);
}  
________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Je ne crois pas que le problème soit là. Le problème c'est qu'après une certaine valeur, la variable qui compte va dans le négatif. La seule explication est, selon moi, qu'il dépasse les 2147483647 et donc, qu'il utilise une variable signé. Pour corrigé, soit travailler en mémoire (très grand nombre), soit utiliser une variable non signé (mais probablement insuffisant, on retombra à 0 dépassé 0xFFFFFFFF (4294967295)).

C++ (@++)
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:



Tu as raison, mais je ne sais pas quel rang peut donner un tel chiffre.
vaut mieux utiliser unsigned int que int dans ces situations.

________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts