Ce prog en C ne doit pas afficher de négatif

Utilisateur anonyme -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
comme le dit le titre ce programme en C affiche des nombres négatif alors qu'il ne devrait pas

#include <stdio.h>
#include <conio.h>
int main(void)
{
float prec=0;
float suiv=1;
int nbr;
int cpt;
float terme;
printf("Entrez le nombre de terme:");
scanf("%d",&nbr);
printf("0\n1\n");
for(cpt=2;cpt<nbr;cpt++)
{
terme = suiv + prec;
prec = suiv;
suiv = terme;
printf("%d\n", int(terme));
}
getch();
}

il fonctionne bien mais quand j'entre un nombre de terme supérieur a 46

il me met des nombres négatifs dans la suite!!

comment faire pour que cette suite continue sans problème??????????
A voir également:

4 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
dépassement de limite de int, essaye
printf("%lu\n", (unsigned long)terme);
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Oui c'est normal car tu dépasses la valeur maximale d'un entier qui, pour un 16 bits est (à 1 près) (2 puissance 16)/2) soit environ 2 milliards.
Si tu veux aller plus aller plus loin, il te faut prendre des 'long long' qui, suivant ta machine, peut être codé sur 32 bits. Mais de toutes façons, il y aura toujours une limite.
Si tu ne veux pas de limites, sache qu'il existe un langage pour lequel les entiers n'ont pas limites (sauf évidemment celle de la mémoire de ta machine), c'est Python.
Ah, un détail: c'est (int)terme et non int(terme).
Et puis si tu repostes, utilise les balises < code > à droite des balises < souligne >.
Bonne continuation.
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Tu arrives trop tard !
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
pourquoi imprimer un entier ?
printf("%20.f\n", terme);
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Ah oui, c'est vrai; d'autant plus qu'un 'float' sur 32bits n'a qu'une précision de 6 chiffres significatifs et un 'double', une bonne douzaine seulement (à vérifier).
Donc afficher des entiers ('castés' d'un float) supérieurs au million a vraiment peu d'intérêt.
0