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

Utilisateur anonyme -  
loupius Messages postés 789 Statut Membre -
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??????????
--
"Ne dites jamais à votre ordinateur que vous êtes pressés"
Configuration: Windows XP
Firefox 3.0.12

4 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    dépassement de limite de int, essaye
    printf("%lu\n", (unsigned long)terme);
    0
  2. loupius Messages postés 789 Statut Membre 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
    1. loupius Messages postés 789 Statut Membre 148
       
      Tu arrives trop tard !
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pourquoi imprimer un entier ?
    printf("%20.f\n", terme);
    0
  4. loupius Messages postés 789 Statut Membre 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