Suite de Fibonacci

Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015 - 25 mars 2007 à 15:46
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 27 mars 2007 à 11:26
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

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 mars 2007 à 15:50
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
25 mars 2007 à 16:10
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++ (@++)
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
25 mars 2007 à 17:04
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
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
25 mars 2007 à 17:26
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
25 mars 2007 à 17:32
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++ (@++)
0
Shakan972 Messages postés 43 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 17 avril 2015
25 mars 2007 à 17:41
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.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
26 mars 2007 à 20:52
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
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
26 mars 2007 à 22:53
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
27 mars 2007 à 04:11
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++ (@++)
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
27 mars 2007 à 11:26
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
0
Rejoignez-nous