Approximation du nombre d'or

Fermé
Hyx - 7 oct. 2013 à 16:21
 Utilisateur anonyme - 8 oct. 2013 à 15:48
Bonjour, je voudrais créer un programme en c donnant l'approximation du nombre d'or en le considérant comme la limite du quotient des termes consécutifs de la suite de Fibonacci. Pour cela, j'ai écrit cela mais il me repond toujours : 1.0000, je ne sais pas pourquoi (je voudrais qu'il s'arrête lorsque la différence de ces termes consécutifs est 0) :

#include <stdio.h>
int main(void) {
int a=1, b=1, c;
double d, e, f=d-e;
do {
d=e;
c=b+a;
a=b;
b=c;
d=c/b;
} while (f>1e-16);
printf("Approximation du nombre d'or : %f\n", d);
}






1 réponse

Bonjour

Plusieurs erreurs.

D'abord, quand tu écris f=d-e, tu sembles croire que f va être la différence entre d et e dans ton programme : ça n'est pas ça du tout. Quand cette ligne est exécutée, le processeur calcule d-e et met le résultat dans f, mais ensuite, si d ou e changent, f ne change pas tant qu'il n'y a pas une nouvelle affectation f=qqchose.
D'ailleurs, ni d ni e ne dont initialisés : ça va te poser un problème.

Ensuite, à l'intérieur de ta boucle, e ne change jamais. Je suppose que tu voulais plutôt faire e=c/b à la fin de ta boucle.
D'ailleurs, quand tu fais ce calcul, c et b étant des entiers, le résultat est un entier.
Même si tu l'affectes à un flottant ensuite, le résultat de la division sera un nombre arrondi à un entier. Il faut qu'il y ait au moins un des opérandes de la division qui soit un flottant pour que la division se fasse en flottant.

Enfin, une question de maths : teste plutôt la valeur absolue de la différence, sauf si tu est sûr que la différence est toujours positive.
0
Utilisateur anonyme
8 oct. 2013 à 12:23
Je crois que pour la question de la division, il est également possible de faire un cast.
0
Utilisateur anonyme
8 oct. 2013 à 15:48
Faire un cast n'est pas une façon supplémentaire par rapport à celle que j'ai indiquée, puisque le cast transforme un opérande en flottant. Ce n'est qu'une manière de le faire parmi d'autres.
0