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 :)
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.
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
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.
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++ ?
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
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
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)).