MoveX
Messages postés230Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention16 juillet 2005
-
7 févr. 2005 à 22:29
MoveX
Messages postés230Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention16 juillet 2005
-
26 févr. 2005 à 11:11
je suis un ultra debutant et pour decouvrir un peu le c++, j ai pondu un petit truc, seulement je comprends pas pourquoi les valeurs s arretent a 65536. meme en passant long int au lieu de int a la declaration des variables.
#include <stdio.h>
main()
{
long int i,n;
n=2;
for (i=1; i<10; i++)
{
printf("%d\n", n);
n=n*n;
}
system("pause");
return 0;
}
MoveX
Messages postés230Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention16 juillet 20051 8 févr. 2005 à 07:42
je n ai pas de bouquin, je fais juste quelques decouvertes pour l instant...
j ai chopper ca sur un site...
mais un long int, cest bien plus qu un simple entier??? normalement ca devrait depasser les 65536? non?
bon je vais faire ca avec double.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 8 févr. 2005 à 09:07
un long int (32 bits) devrait aller jusqu'a 2^31-1 soit 2 147 483 647 en arithmétique signée.
ton problème vient du fait que tu calcul ((2^2)^2)... 10 fois ce qui fait au final
1.797.10^308 donc il a un très gros dépassement de capacité et donc ton calcul est faux.boucle 1 : n2 n*n 4boucle 2 : n 4 n*n 16boucle 3 : n 16 n*n 256boucle 4 : n 256 n*n65536boucle 5 : n 65536 n*n 4294967296
= > ne tient pas sur 32 bits car ça fait en hexa (8 chiffres heax maxi):
1 0000 0000 tronqué à 0000 0000 ce qui donne donc n = 0
les boucles suivante, n étant égal à 0, tu auras toujours 0.
En conclusion, losque l'on programme il faut toujours savoir quelles seront les valeurs min et max des valeurs que l'on manipule pour éviter des dépassements de capacité sinon le risque est énorme (comme la destruction d'une fusée ariane par exemple...)
MoveX
Messages postés230Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention16 juillet 20051 8 févr. 2005 à 18:28
ok ok, bon cest note pour le depassement, mais pour l exemple de
hylvenir ca marche pas, meme en changeant i par n. dev c++ me dit qu il
y a une erreur, en fait, qu il y en a 31!