Calcul en C complètement faux
filou156
-
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
loupius Messages postés 697 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je travaille depuis un certain temps avec C et j'ai un souci. Je calcule un nombre assez grand soit :
4344039185792571909692586446309849. Je l'ai mis sous int et jusque là tout va bien. Je tente alors de le diviser par 24 et oups, j'obtiens une valeur erronée. La réponse devrait être : 181 001 632 741 357 162 903 857 768 596 243.
Le calcul est en int :
int
nbr1 = 0,
nbr2 = 0;
nbr1 = 4344039185792571909692586446309849;
nbr2 = nbr1 / 24;
printf(%d, nbr2); // J'ai essayé %lld sans succès
Merci de m'aider
Je travaille depuis un certain temps avec C et j'ai un souci. Je calcule un nombre assez grand soit :
4344039185792571909692586446309849. Je l'ai mis sous int et jusque là tout va bien. Je tente alors de le diviser par 24 et oups, j'obtiens une valeur erronée. La réponse devrait être : 181 001 632 741 357 162 903 857 768 596 243.
Le calcul est en int :
int
nbr1 = 0,
nbr2 = 0;
nbr1 = 4344039185792571909692586446309849;
nbr2 = nbr1 / 24;
printf(%d, nbr2); // J'ai essayé %lld sans succès
Merci de m'aider
A voir également:
- Calcul en C complètement faux
- Calcul moyenne excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Logiciel gratuit calcul surface m2 - Télécharger - Outils professionnels
6 réponses
Bonsoir, quelle est la valeur erronée obtenue ? Attention car le nombre en question dépasse 64 bits, la taille probable de l'int. (en fait , cela dépend de la machine, vérifier cela par printf("La taille d'un int sur cette machine est de %d octets\n",sizeof(int));). Il est donc probable que l'instruction "nbr1= ..." entraine un cast implicite, le compilateur n'affiche-t-il pas un warning ?
Par ailleurs, la division entière par 24 donne
1810016327413571629038577685962
et non
181001632741357162903857768596243
Cordialement,
Par ailleurs, la division entière par 24 donne
1810016327413571629038577685962
et non
181001632741357162903857768596243
Cordialement,
Pareil !
Ton nombre est trop grand, il dépasse de la culotte si vous me passez l'expression. Faut utiliser un type plus gros, genre long, ou te faire un type perso.
Ton nombre est trop grand, il dépasse de la culotte si vous me passez l'expression. Faut utiliser un type plus gros, genre long, ou te faire un type perso.
Sur une machine standard 32bits, avec gcc et sous Linux, on a:
- 2 octets pour 'short',
- 4 octets pour 'int' ou 'long',
- 8 octets pour 'long long',
8 octets donnent 2^64 soit environ 10^20 et ton nombre à plus de 20 chiffres, c'est râpé.
Il te reste au moins 2 solutions:
- définir ton type comme le dit Groarh,
- changer de langage, par exemple, pour un entier Python n'a pas de limite.
Bonne réflexion.
- 2 octets pour 'short',
- 4 octets pour 'int' ou 'long',
- 8 octets pour 'long long',
8 octets donnent 2^64 soit environ 10^20 et ton nombre à plus de 20 chiffres, c'est râpé.
Il te reste au moins 2 solutions:
- définir ton type comme le dit Groarh,
- changer de langage, par exemple, pour un entier Python n'a pas de limite.
Bonne réflexion.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question